使用BusyBox构建根文件系统
busybox构建系统之前的准备第一安装:为了解决busybox编译出错:fatal error:curse.h错误是因为缺少套件ncurses develapt-get install libncurses5-dev问题就可以解决;第二步:下载arm-linux-gcc安装,这个是基于arm架构的linux平台交叉编译工具,下载arm-linux-gcc-4.4.3版
busybox构建系统之前的准备
第一安装:
为了解决busybox编译出错:fatal error:curse.h错误是因为缺少套件ncurses devel
apt-get install libncurses5-dev
问题就可以解决;
第二步:下载arm-linux-gcc安装,这个是基于arm架构的linux平台交叉编译工具,下载arm-linux-gcc-4.4.3版本
1、tar -zxvf arm-linux-gcc-4.4.3.tar.gz -C /
2、在终端sudo vim /root/.bashrc最后一行填写
export PATH=$PATH:/opt/tools/4.4.3/bi
3、安装兼容库
sudo apt-get install g++-muItilib
source /root/.bashrc
4、测试 arm-linux-gcc -v
第三步下载
下载busybox的源码包,最新版本为busybox-1.15.0
http://www.busybox.net/downloads/
解压并进入目录:
# tar jxvf busybox-1.15.0.tar.bz2
# cd busybox-1.15.0
修改Makefile:
# gedit Makefile &
把 164 行修改为:
CROSS_COMPILE = arm-linux-
把 189 行修改为:
ARCH = arm
配置:
# make menuconfig
进入busybox目录
vim Makefile
将ARCH ?= $(SUBARCH) 修改为
ARCH ?= arm
将CROSS_COMPILE ?= 修改为
CROSS_COMPILE ?= arm-linux-
3. 执行source /etc/profile使编译器生效
4. make menuconfig配置busybox选项:
a.进入 Busybox Settings à
build Options->
选中 “Build busybox as a static binary”, 静态链接
Cross Compiler prefix (arm-linux-)
Installation Options->
选中 “Don‘t use /usr”, 选中该项可以避免busybox 被安装到宿主系统的/usr目录下,破坏宿主系统
Busybox Installation Prefix (/xxx/rootfs)
该选项表明编译后的busybox的安装位置
选上以下几项:
|
退出并保存配置。
编译:
# make
安装:
# make install
在busybox-1.15.0目录下可以找到_install子目录,这就是刚才的安装目录。
二)加入必要的目录与文件
改名为最小化根文件系统目录:
# mv _install mini_rootfs
进入最小化根文件系统目录:
# cd mini_rootfs
在mini_rootfs目录里建立一个名为create_rootfs.sh的脚本文件:
|
为create_rootfs.sh脚本加上可执行权限:
# chmod +x create_rootfs.sh
执行该脚本以生成最小化根文件系统所需要的目录与文件:
# ./create_rootfs.sh
拷贝交叉编译器里的动态链接库到 最小化根文件系统的 lib 和 usr/lib 目录:
# cp -f /opt/arm-2009q1/arm-none-linux-gnueabi/libc/armv4t/lib/*so* lib -a
# cp -f /opt/arm-2009q1/arm-none-linux-gnueabi/libc/armv4t/usr/lib/*so* usr/lib -a
etc/fatab文件的内容为:
|
etc/inittab文件的内容为:
|
etc/profile文件的内容为:
|
etc/init.d/rcS文件的内容为:
|
resolv.conf文件的内容为:
|
etc/inetd.cof是inetd的配置文件,它
的内容为:
|
etc/sysconfig/HOSTNAME文件的内容为你的英文名字。
etc/passwd
、etc/
group
、etc/
shadow
文件的内容为空。
etc/
mdev.conf是mdev设备文件系统的配置文件,可以参考:
busybox下mdev的使用以及mdev.conf的规则配置
mdev实现U盘和SD卡的自动挂载
OK,算是做好了~~
三)用户管理
在文件系统正常运行起来后,使用adduser命令:
# adduser root
会打印出如下消息:
passwd:unknown uid 0
这表示不能为该用户设置密码,此时你会发现passwd命令也无法使用。
解决的办法是,打开/etc/passwd文件,其内容为:
root:x:1000:1000:Linux User…:/home/root:/bin/sh
将用户ID和组ID均修改为0。
打开/etc/group文件,其内容为:
root:x:1000:
同样将组ID修改为0。
然后,passwd命令就可以正常使用了。
这时为root用户设置口令:
# passwd root
根据提示输入密码。
这是我做好的最小化根文件系统的压缩包:
|
解压:
# tar zxvf mini_rootfs.tar.gz
第二种:
STEP 1:构建目录结构
创建根文件系统目录,主要包括以下目录
/dev /etc /lib /usr /var /proc /tmp /home /root /mnt /bin /sbin /sys
#mkdir /home/rootfs
#cd /home/rootfs
#mkdir dev etc lib usr var proc tmp home root mnt sys
STEP 2: 使用busybox构建/bin /sbin linuxrc
进入busybox-1.16.1目录,执行
#make defconfig
#make menuconfig
Busybox Setting ----->
Build Options ----->
//1选择将busybox进行静态编译
[*]Build BusyBox as a static binary (no shared libs)
//2.指定交叉编译器为
(/usr/local/arm/4.3.2/bin/arm-linux-)Cross Compiler prefix
Installation Options -----> (选择生成的文件存放目录,也可以直接放在rootfs下就不用拷贝了)
//3.选择上 Don’t use /usr
Busybox Library Tuning--->
[*]Username completion
[*]Fancy shell prompts
[*]Query cursor position from terminal
//4.编译出的busybox的shell命令解释器支持显示当前路径及主机信息
保存退出
#make
#make install
在busybox目录下会看见 _install目录,里面有/bin /sbin linuxrc三个文件
将这三个目录或文件拷到第一步所建的rootfs文件夹下。
#cp bin/ sbin/ linuxrc /home/rootfs -ra
切记一定要带上-a的参数,因为bin目录里大部分都是链接,如果不带-a的参数,拷过去之后会做相应的复制,不再是链接的形式
STEP 3 构建etc目录:
1)进入根文件系统rootfs的etc目录,执行如下操作:
拷贝Busybox-1.16.1/examples/bootfloopy/etc/* 到当前目录下
#cp –r busybox-1.16.1/examples/bootfloopy/etc/* rootfs/etc
修改inittab,
原始文件为:
1 ::sysinit:/etc/init.d/rcS
2 ::respawn:-/bin/sh
3 tty2::askfirst:-/bin/sh
4 ::ctrlaltdel:/bin/umount -a -r
修改后为:
---(1):开机免登陆,直接打开shell(前面数字为行号)
1 ::sysinit:/etc/init.d/rcS
2 #::respawn:-/bin/sh
3 #::respawn:-/bin/login
4 console::askfirst:-/bin/sh
5 #tty2::askfirst:-/bin/sh
6 ::ctrlaltdel:/bin/umount -a -r
---(2):开机需要登陆(前面数字为行号)
1 ::sysinit:/etc/init.d/rcS
2 #::respawn:-/bin/sh
3 ::respawn:-/bin/login
4 #console::askfirst:-/bin/sh
5 #tty2::askfirst:-/bin/sh
6 ::ctrlaltdel:/bin/umount -a -r
2)拷贝虚拟机上的/etc/passwd, /etc/group, /etc/shadow到rootfs/etc下
# cp /etc/passwd rootfs/etc
# cp /etc/group rootfs/etc
# cp /etc/shadow roofs/etc
对以下三个文件修改,只保存与root相关的项,根据具体情况内容会有所不同。
修改passwd为root:x:0:0:root:/root:/bin/sh,即只保存与root相关项,而且最后改成/bin/ash。
修改group为root:x:0:root
修改shadow为root:$1$x9yv1WlB$abJ2v9jOlOc9xW/y0QwPs.:14034:0:99999:7:::
登陆开发板时需输入用户名密码,同虚拟机相同
3)修改profile
PATH=/bin:/sbin:/usr/bin:/usr/sbin //可执行程序 环境变量
export LD_LIBRARY_PATH=/lib:/usr/lib //动态链接库 环境变量
/bin/hostname osee
USER="`id -un`"
LOGNAME=$USER
HOSTNAME='/bin/hostname'
PS1='[\u@\h \W]# ' //显示主机名、当前路径等信息:
4)修改 etc/init.d/rc.S文件
/bin/mount -n -t ramfs ramfs /var
/bin/mount -n -t ramfs ramfs /tmp
/bin/mount -n -t sysfs none /sys
/bin/mount -n -t ramfs none /dev
/bin/mkdir /var/tmp
/bin/mkdir /var/modules
/bin/mkdir /var/run
/bin/mkdir /var/log
/bin/mkdir -p /dev/pts //telnet服务需要
/bin/mkdir -p /dev/shm //telnet服务需要
#echo /sbin/mdev > /proc/sys/kernel/hotplug//USB自动挂载需要
/sbin/mdev -s //启动mdev在/dev下自动创建设备文件节点
/bin/mount -a
#######配置网络################################
/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0
/sbin/ifconfig eth0 192.168.1.70
/sbin/ifconfig eth0 netmask 255.255.255.0
/sbin/route add default gw 192.168.1.1 eth0
/sbin/ifconfig eth1 192.168.1.71 netmask 255.255.255.0
/sbin/route add default gw 192.168.1.1 eth1
5)修改etc/fstab文件,增加以下文件
none /dev/pts devpts mode=0622 0 0
tmpfs /dev/shm tmpfs defaults 0 0
STEP 4 构建lib目录:
(~/at91/x-tools/arm-zch-linux-gnueabi/arm-zch-linux-gnueabi/sysroot/lib我的只是把这个目录下的SO文件复制就可以了)
1)#cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
将以下动态库拷贝到rootfs/lib下
#cp *so* roofs/lib -a
2)#cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib
将以下动态库拷贝到rootfs/lib下
#cp ./libstdc++.so.* rootfs/lib -a
更多推荐
所有评论(0)