1.搭建开发环境
开发环境(主要指linux、虚拟机的安装和交叉编译环境的搭建)完全按照mini6410用户手册4.3节操作,在此不再赘述。
2.根文件系统的目录说明
根文件系统是Linux启动的时候使用的第一个文件系统,没有它系统将无法正常的启动,然而在这个根文件系统中又包含了一系列的目录,接下来对这些目录做一个简单的介绍。
bin 存放所有用户都可以使用的、基本的命令。
sbin 存放的是基本的系统命令,它们用于启动系统、修复系统等。
Usr 里面存放的是共享、只读的程序和数据。
proc 这是个空目录,常作为proc 文件系统的挂载点。
dev 该目录存放设备文件和其它特殊文件。
etc 存放系统配置文件,包括启动文件。
lib 存放共享库和可加载块(即驱动程序),共享库用于启动系统、运行根文件系统中的可执行程序
boot 引导加载程序使用的静态文件。
home 用户主目录,包括供服务账号锁使用的主目录,如FTP。
mnt 用于临时挂接某个文件系统的挂接点,通常是空目录。也可以在里面创建空的子目录。
opt 给主机额外安装软件所摆放的目录。
root root 用户的主目录
tmp 存放临时文件,通常是空目录。
var 存放可变的数据,如日志等。
3 建立根文件系统的目录
进入到自己要放置文件系统的目录,采用《mini2440 Linux移植开发实战指南》,新根文件系统目录的脚本文件create_rootfs_bash,使用命令chmod +x create_rootfs_bash ,改变文件的可执行权限,执行“./create_rootfs_bash ”运行脚本,就完成了根文件系统目录的创建。脚本create_rootfs_bash文件的内容为:
- #!/bin/sh
- echo "------Create rootfs directons start...--------"
- mkdir rootfs
- cd rootfs
- echo "--------Create root,dev....----------"
- mkdir root dev etc boot tmp var sys proc lib usr mnt home
- mkdir etc/init.d etc/rc.d etc/sysconfig
- mkdir usr/sbin usr/bin usr/lib usr/modules
- echo "make node in dev/console dev/null"
- mknod -m 600 dev/console c 5 1
- mknod -m 600 dev/null c 1 3
- mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp
- mkdir var/lib var/lock var/run var/tmp
- chmod 1777 tmp
- chmod 1777 var/tmp
- echo "-------make direction done---------"
在脚本中改变了tmp 目录的使用权,让它开启sticky 位,为tmp 目录的使用权开启此位,可确保tmp 目录底下建立的文件,只有建立它的用户有权删除。尽管嵌入式系统多半是单用户,不过有些嵌入式应用不一定用root 的权限来执行,因此需要遵照根文件系统权限位的基本规定来设计。
4.建立动态链接库(即lib目录)
动态链接库直接用友善之臂的,先解压友善之臂的根文件包,拷贝lib的内容到新建的根文件目录lib内。
- cp -rfd /opt/FriendlyARM/mini6410/rootfs_qtopia_qt4 /opt/FriendlyARM/mini6410/rootfs/lib
6.交叉编译busybox(即根文件系统内bin,sbin等目录)
Busybox 是一个遵循GPL v2 协议的开源项目,它在编写过程总对文件大小进行优化,并考虑了系统资源有限(比如内存等)的情况,使用Busybox 可以自动生成根文件系统所需的bin、sbin、usr 目录和linuxrc 文件。具体介绍可以参考韦东山完全手册的346页。
(1)、解压busybox
cd /opt/FriendlyARM
tar –zxvf busybox-1.17.2-20101120.tgz
(2)、进入源码,修改Makefile 文件:(这个地方是很重要的一步,必须做,有的教程或者文章参考内核的配置与编译,即在make menuconfig和make后面添加ARCH、CROSS_COMPILE等,而对此不做修改,将可能会导致“request_module: runaway loop modprobe binfmt-464c”等错误出现)
cd /opt/studyarm/busybox-1.17.2
修改:
CROSS_COMPILE ?=arm-linux- //第164 行
ARCH ?=arm //第189 行
(3)、配置busybox
提示:友善之臂已经在光盘中提供了busybox 的源代码包,在光盘\linux 目录中,busybox-1.17.2-20101120.tgz解压后里面包含了友善之臂提供的缺省配置文件:fa_config (输入命令“cp fa.config .config”可以调用该配置),一般用户直接使用缺省文件就可以了,这样生成的busybox 和root_qtopia_qt4 中的是完全一致的。但为了对它的配置了解 更多一些,可以参考 《mini2440 Linux移植开发实战指南》 的如下步骤:
输入 make menuconfig进行配置
下面的配置和busybox1.17.2的配置基本一样,部分地方不太一样。
- Busybox Settings--->
- General Configuration--->
- [*] Show verbose applet usage messages //这个是现实程序的详细信息吧
- [*] Store applet usage messages in compressed form
- [*] Support –install [-s] to install applet links at runtime
- [*] Enable locale support(system needs locale for this to work)