嵌入式(编译内核、根文件系统等)
1.嵌入式系统的组成:
通过 make->linux make busybox make uls 编译通过,如果缺少的软件,需要自己下载。
2.buil root
通过"build root" 裁剪,可以将软件、命令、驱动等按需裁剪。
类比:个人感觉跟雨林木风裁剪windows一样。
(1)获取buildroot
http://buildroot.uclibc.org/download.html
实际下载的源码包是 buildroot-2016.02.tar.gz
解压命令
(2)配置buildroot
将源码包复制到XXX目录下,并解压tar -xvf buildroot-2015.02.tar.gz
进入目录,执行配置命令:cd /XXX/buildroot-2015.02
执行:make ARCH=arm menuconfig
配置界面如下:
进入target options
配置CPU参数:little endian 指的是小端存储;二进制格式是ELF;CPU是Cortex-A5;交叉工具支持eabihf;浮点书处理采用VFP-v4;采用精简指令集Thumb2;
配置如下图所示:
进入toolchain
将Toolchaintype配置为Externaltoolchain,然后在Toolchain中选择交叉编译工具的版本,如Custom toolchain,在Toolchain origin中选择Pre-installed toolchain,后面编译时,buildroot将会根据Toolchain path找到我们的交叉编译工具。选中Enable MMU support,退回上一界面;
进入System configuration
在system hostname一栏中输入开发板的名称,如ZHD-A5,在system banner中可输入欢迎语,如welcome to Hi-Target。在Init system中选择BusyBox,在/dev management中选择Dynamic using mdev,即使用mdev动态加载设备节点的方式,然后在Path to thepermission tables中选择设备节点的配置表,这里我们一定要选择system/device_table_dev.txt,否则后面在dev目录下将不会生成各 种设备节点。当然我们也可以手动的配置该文件,添加必要的节点或删除不需要的节点。Root password为配置进入linux控制台终端后的密码,为空则登录时不需要密码,默认登录用户名为root。选中Run agetty(login prompt)after boot。Remount root filesystem read-write during boot表示可以进行动态的挂载;
再进入下面的getty options选项:
将TTY port配置为ttyS0,将baudrate配置为115200,对应开发板的打印串口
进入Filesystem images
选中ext2/3/4root filesystem,然后在ext2/3/4variant中选择ext4,选中tar the root filesystem,最后保存当前的配置并退出,配置完成。大家也可以根据自己的实际需要进行配置。
进入target packages
在target packages目录下,有一大堆第三方的开源工具软件,基本上嵌入式上可能会用到得或用不到的,在这里都用,如果你想要把这个工具软件包含进固件里面,很简单,只要在这个软件的名称前面打个*星号,表示要编译这个软件到固件里面,从此和刀耕火种的源代码移植say goodbye,今入工业文明时代。
下面以移植DNS服务器bind为例,做一个简单的说明:
(3)编译buildroot
只需在buildroot的根目录下执行make指令即可编译整个buildroot。
编译时,buildroot会自动下载第三方软件的源码,我们只要等一下,让buildroot自己下载编译。编译完成后,会在output/image目录下面生成固件的镜像包,把这个包拷贝到RTK的platform目录下,然后解压,就可以使用了。在output/target下也可以看根文件,包含的内容如下所示:
借助buildroot一个含有各项所需要包(busybox,apache,PHP,bind等)的文件系统就做好了,真是利器,让很来需要花很多时间和精力的移植工作变得简单而且高效。