介绍 最近在学习嵌入式 Linux 设备驱动开发。刚开始学习时,一个比较大的痛点是:总要想办法把编译好的二进制文件搬到设备上。对于内核驱动或用户态程序这类较小的文件,用 scp 之类的工具就能解决;但到了学习后期,涉及到修改内核源代码、甚至要替换 SD 卡上的内核镜像时,可用的手段就比较有限了——除非你能忍受每次改完代码都把内核重新烧写到 SD 卡或其他存储介质上。 经过一番搜索,我发现了一种很适合嵌入式开发的启动方式:用 TFTP 加载内核,用 NFSRoot 挂载根文件系统(RootFS)。这种方式可以大大减少把二进制文件拷贝到存储介质的次数。 以我家里的网络为例(配置如下图):我用笔记本进行开发,网络中还有一块嵌入式开发板和一台服务器。服务器走有线连接,网络比较稳定。借助 NFSRoot 和 TFTP,我可以把开发板的 RootFS、内核镜像和 dtb 等文件都放在服务器上。开发板上电后,会先从服务器读取内核到内存中的指定地址,再用它启动系统;内核加载过程中,又会把服务器上的 RootFS 挂载为根目录,完成启动。 这样的设置意味着:开发板启动后的“硬盘”已经不在开发板上,而是在服务器上了!如果用终端或…