3.1.1. 不需要烧写kernel和rootfs的方式

此种做法,在实际开发中,还是有一些人会用到的。

其背景是,嵌入式开发中,相对普通上层软件开发,每次新编译出一个版本的软件,都要很麻烦地烧录到对应的存储介质,比如Nor Flash上,然后给开发板上电,继续开始调试开发,而不能像开发上层PC端软件,在IDE中,编译一下,点击运行,即可看到最新结果。

所以,嵌入式开发中,开发的效率显得很低,其中一个方法,可以先对避开此问题,避免每次都要重新烧写新编译的程序的问题,那就是,对于新版本的kernel和rootfs,分别通过tftp或NFS挂在kernel,通过NFS挂在rootfs,的方式,重新编译一个新版本的kernel或者是rootfs时,每次都不用重新烧写,只需要把对应的文件,放到对应的tftp或者NFS的文件夹下面即可。

此法详细做法相关的部分内容,下面会涉及,故此处不做太多探讨。而且真的详细讨论的话,超出了此文的范畴。

此处,只是对于此法进行概要说明:

  1. 目标

    实现kernel通过tftp挂载,rootfs通过nfs挂载的方式,实现高效率的嵌入式开发

  2. 前提
    1. 硬件
      1. 开发板上有网卡
      2. 网卡已连接到一个路由或交换机,并且PC端,即提供tftp和nfs的服务器端,也连到此网络,开发板和PC端,同属于一个局域网段。
    2. 软件
      1. PC端运行了tftp服务,新编译的kernel文件,放在tftp的根目录下
      2. PC端运行了nfs服务,所用的Linux内涵,也设置并启用了对应的nfs服务,编译好的rootfs,放在nfs服务的根目录下。
  3. 如何操作
    1. uboot中,通过tftp mem_addr kernel_file的方式去加载内核
    2. 内核运行起来后,通过NFS去挂在rootfs
    3. 正常加载rootfs后,就可以像普通的Linux开发一样,通过串口,输入命令操作Linux了
  4. 优缺点
    • 优点

      免去了每次新编译的kernel和rootfs,都要重新烧写这一麻烦的事情

    • 缺点
      • 很明显,如果开发中,涉及到对应的网络驱动的调试等,内核的NFS服务的调试等,即本身所用到的网络功能都是要调试的对象,那就不能用此法了
      • 另外,网络加载文件的速度,一般都是不错的,但是也不排除,有时候会受其他PC端某个网络资源占用太多的程序的影响
      • 而网络加载文件的稳定性,不同的环境,差异很大。多数情况下,都是很稳定的,但是也有人遇到各种原因,导致不稳定的,所以此时此法即使可用,但用起来也会很郁闷