前面介绍了怎么样从手头源码编译uboot 和kernel ,我们的最终目的是开发驱动,但现在只会从2.6 的思想去开发驱动,所以必须有板子能跑的kernel 源码才行,这就是传说中的设备树嘛,看了别的网友使用的帖子,发现3.x 的内核和2.6 的内核驱动开发方式有了变化,增加了.dts 设备源码树的这么个东西,在群里听说宋老大出了本基于4.0 内核的驱动书,所以去图书馆借了,还在啃,但论坛有任务要完成啊,所以这几节先从2.6 的思想去试着开发看看,等书看差不多了,再用最新的驱动思想来搞,好吧。。。 上节已经预报过了,这节要说怎么构建根文件系统,开始吧,首先得有源码对吧,我就随便整了个,不用最新的,不用最旧的,从中间随便下了这么个1.22的busybox源码:
解压之后,进去,然后开始配置、编译就行了。 make ARCH= ARMCROSS_COMPILE=arm-linux-gnueabihf- menuconfig 在图形化界面里面根据自己需要,将自己能用上的命令选上即可,这个方式跟内核配置一样,听说最新版本的uboot也采用这种menuconfig方式配置了,可以方便我们搞底层的小伙伴了。。。
选中之后,就可以进行编译了。。。 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf--j4 很快就可以编译成功了,下一步尤其要注意,千万要注意,整错了就把宿主机给搞完蛋了。。。
这里,我们一定要加上CONFIG_PREFIX 这个前缀,否则默认是覆盖掉本机文件的,我们随便建一个文件夹,这个文件夹是需要通过nfs 导出给开发板进行访问的。然后将这个文件夹替换掉上图中的/path/from/root 这个路径,执行install 即可安装busybox 。这里只是安装了busybox ,但是开发板需要怎么访问呢。需要我们宿主机通过nfs 将该目录导出。在exports 文件里面写上:
这个文件目录啥的各个linux发行版可能不一样,反正你根据自己装的发行版,配置好就行,写完了之后执行以下exportfs -ra使这个生效。然后查看一下:
看到busybox安装的目录被导出了,就可以进行下面配置了。 刚刚我们只是安装了busybox最小的必须组件,现在用bbb去挂是挂不上的。还有很多设备节点没有创建,输入输出啥的也都没有配置好,运行的动态库也都没装上呢。还需要一步步建立这些东西。这里我们参考一下韦东山大侠写的嵌入式linux应用开发完全手册这书,跟着一步步来构建这些东西: 首先在/etc/下面建立inittab文件,里面输入:
然后安装glibc库,从我们bbb的gcc目录下,将下面这些文件,拷贝到我们nfs导出的目录的/lib目录下:
其实用不了这么多,但为了以后省点事,就都考过去了,反正我们又不在乎最终生成的镜像的大小,bbb板载emmc有4G呢,怕啥。。。 然后在/etc下新建init.d目录,在里面简历rcS文件,内容为:
linux运行时会需要虚拟文件系统,这是为了方式频繁写磁盘,造成磁盘寿命减少的,因为这些虚拟文件系统是常驻在内存里面的,一断电,就没了的,这就需要我们建立这些虚拟文件系统的挂载点和目录,在etc下建立fstab文件,输入内容:
下面就到dev目录下,在这里建立一些设备节点,给系统使用:
这里我们都是通过手工建立的,然后还需要在根目录下建立一些文件夹,保证最终结果是酱紫的:
然后就完事了,就可以通过bbb板子挂载了。在bbb的uboot中输入:
然后就可以根据上节说的,bootm来启动系统了:
这里可以看到我们已经可以成功挂载nfs系统了,下面就可以在这里面进行驱动开发了,这样很方便的。。。 好了这节说完了构建根文件系统。最近在啃宋老大基于4.0内核的书呢,一时半会也啃不完,要不然驱动这么好搞,都搞去了,对吧,下节我就用2.6内核的思想和方式,来试验下驱动,实现点亮一个bbb板子上小灯,好吧,这节就到这里吧。。。
|