根文件系统构建
一.建立基本的目录结构
二.交叉编译 busybox
三.创建配置文件
四.拷贝 lib 文件
其步骤如下:
1. 建立基本的目录结构
a.在宿主机上建一个目录作为目标系统的根目录
# mkdir /friendly-arm/rootfs
# cd /friendly-arm/rootfs
# mkdir bin sbin dev etc lib proc usr var tmp
注: tmp 目录需要设置 sticky 位: # chmod 1777 tmp
b.在 usr 目录下建立指向 lib,bin,sbin 的符号连接
# cd usr
# ln -s ../lib lib
# ln -s ../bin bin
# ln -s ../sbin sbin
注:我们使用 devfs ,所以不需手动建立 dev 目录下的设备文件
2. 交叉编译 busybox
a.下载 busybox 源码并解压缩
# scp gdlc@IP:/opt/busybox-1.00.tbz /opt
# cd /opt
# tar -xjvf busybox-1.00.tbz
b. 配置
#cd busybox-1.00
#sudo make menuconfig
i)设置 devfs 选项 general configure-->[*]support for devfs
ii)设置交叉编译选项 build options-->[*]do you want to
build busybox with a cross compiler?
输入
/opt/crosstool/gcc- 3.3.4-glibc-2.3.3/arm-s3c2410-
linux-gnu/bin/arm-s3c2410-linux-gnu- //此处指你交叉编译工具链的路径
iii)Build Options
[*] Build BusyBox as a static binary (no shared libs)
注: 如果选中该选项 , 则 busybox 编译成静态链接
的可执行文件
iv)Installation Options
[*] Installation Options Don't use /usr
注:这个选项一定要选 , 否则 make install 后
busybox 将安装在原系统的 /usr下
c. 再选择你需要的命令
保存退出
编译: #sudo make
安装: # sudo make install
d. 复制文件到根文件系统中:
# sudo cp -ad _install/* /friendly-arm/rootfs/
3. 创建配置文件
a. 在 /friendly-arm/rootfs/ 目录下创建
touch etc/inittab
mkdir etc/init.d ; touch etc/init.d/rcS
touch etc/passwd
touch etc/group
touch etc/busybox.conf
touch etc/profile
touch etc/hosts
touch etc/securetty
b. 在inittab添加:
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
#::askfirst:/bin/login
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::restart:/sbin/init
c. 修改Passwd & group & busybox.conf等文件
从宿主机上拷贝 passwd 和 group 文件过来删掉其中多余的用户信息
busybox.conf 的内容:
[SUID]
su = ssx root.root
passwd = ssx root.root
more = ssx root.root
d. 在rcS添加:
#! /bin/sh
PATH=/usr/sbin:/usr/bin:/sbin:/bin:
export PATH
/bin/mount -t proc none /proc
/sbin/ifconfig lo 127.0.0.1
e. 須securetty添加:
console
ttyS0
ttySAC0
tts/0
tty1
tty2
vc/1
vc/2
f. lib库的拷贝:
sudo cp -r /home/gdlc/makecrosstool/armgcc-setup/gcc-3.3.4-glibc-2.3.3
/arm-S3C2410-linux-gnu/arm-S3C2410-linux-gnu/lib ./
注:其他配置文件可直接拷贝过来用 , 拷贝 lib 文件时直接从交叉编译工具链中拷贝过来用即可
。拷交叉编译工具链中的lib库时,其中有两个lib库,是那个目录更深一层的lib库。
没有评论:
发表评论