标签:
busybox是一个复合了大量简易版linux工具的程序,嵌入式系统中使用它可以快速建立一个相对简易的根文件系统。
1.下载busybox
官网 www.busybox.net
目前(2015.8.4)的最新稳定版为1.23.2
2.编译busybox
编译busybox前,请安装好交叉工具链,比如我这里是omapl138的工具链,安装位置/opt/arm-linux-gcc/omapl138/bin/,因为编译器前缀和另外一个编译器的相同,每次使用前设置环境变量
PATH=$PATH:/opt/arm-linux-gcc/omapl138/bin/ cd ~/buildspace tar xf ~/Downloads/busybox-1.23.2.tar.bz2 cd busybox-1.23.2 make menuconfig make make install
menuconfig时,
Busybox Settings --->
Build Options --->
() Cross Compiler prefix 填入交叉工具链的前缀,这里是arm-none-linux-gnueab-
Installation Options("make install" behavior) ->
What kind of applet links to install (as soft-links)
(./_install) BusyBox installation prefix 安装路径,我喜欢用这个默认值
其他选项一般默认就够用。
3.构建根文件系统目录
以root用户创建根目录,拷贝busybox文件,创建几个目录
sudo -s mkdir /home/rootfs cd /home/rootfs cp -r ~/biuldspace/busybox-1.23.2/_install/* . mkdir dev etc lib mnt opt var tmp proc sys root
创建两个基本设备文件
mknod dev/console c 5 1 mknod dev/null c 1 3
创建/linuxrc的初始化配置文件/etc/inittab
该文件中指定linuxrc初始化完成后运行/etc/init.d.rcS脚本。然后在ttyS2运行一个shell,该shell不需要登陆。
::sysinit:/etc/init.d/rcS ::ctrlaltdel:/sbin/reboot ::shutdown:/sbin/swapoff -a ::shutdown:/bin/umount -a -r ::restart:/sbin/init ttyS2::respawn:-/bin/sh
/etc/init.d/rcS的内容。在rcS文件中,必须使用绝对路径,因为环境变量还没有初始化......
mount -a # 挂载在/etc/fstab中定义的所有挂载点 echo /sbin/mdev > /proc/sys/kernel/hotplug # 设置热插拔事件处理程序为mdev mdev -s #设备节点维护程序mdev初始化 mkdir /dev/pts #为telnetd创建pts目录 mount -t devpts devpts /dev/pts #挂载pts目录 /bin/hostname -F /etc/hostname # 设置主机名。/etc/hostname 的内容为主机名字符串 mkdir /var/run #ifup需要该目录 /sbin/ifup -a #根据/etc/network/interface设置网卡 /usr/sbin/telnetd & #运行telnetd
#后台运行你的程序
/etc/fstab的内容
tmpfs /dev tmpfs defaults 0 0 proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 tmpfs /var tmpfs defaults 0 0 tmpfs /tmp tmpfs defaults 0 0
创建ifup需要的文件夹
cd /home/rootfs/etc/ mkdir network cd network mkdir if-down.d if-post-down.d if-pre-up.d if-up.d
/etc/network/interfaces 的内容
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.0.5 netmask 255.255.255.0 gateway 192.168.0.1
/etc/passwd 的内容
root::0:0:root:/root:/bin/sh
/etc/profile 的内容
PS1=‘\u@\h:\w \$ ‘ #设置终端提示符 PATH=$PATH:/usr/local/bin #设置搜索路径 export TERM=vt102 #termcap的环境变量,gdb -tui需要 export TERMINFO=/usr/share/terminfo
拷贝动态库
cd /opt/arm-linux-gcc/omap_4.3.3/arm-none-linux-gnueabi/libc cp lib/* /home/rootfs/lib/ cp usr/lib/libstdc++.* /home/rootfs/lib/
制作ubi镜像文件
if [ -e ubifs.img ]; then rm ubifs.img; fi if [ -e ubi.img ]; then rm ubi.img; fi rootfs=/home/rootfs mkfs.ubifs -v -r ${rootfs} -m 2048 -e 126976 -c 3717 -o ubifs.img -F ubinize -v -o ubi.img -O 2048 -m 2048 -p 128KiB -s 512 ubinize.cfg rm ubifs.img
其中,mkfs.ubifs需要加-F参数,否则ubi文件系统很可能在启动一次后就坏掉。-F参数的意思是在第一次启动时清空空闲区域。
ubinize.cfg的内容
[rootfs] mode=ubi image=ubifs.img vol_id=0 vol_type=dynamic vol_name=rootfs vol_flags=autoresize
mkfs.ubifs是创建单个卷(类似逻辑分区)的镜像,ubinize是创建一个可以包含多个卷的镜像(类似扩展分区)。ubinize.cfg中,[]内为卷的名字。
标签:
原文地址:http://www.cnblogs.com/hua946/p/4702594.html