教你如何制作根文件系统
扫描二维码
随时随地手机看文章
1 创建目录及设备文件
mkdir rootfs
cd rootfs
mkdir bin dev etc lib proc sbin sys usr mnt tmp var
mkdir usr/bin usr/sbin usr/lib lib/modules
mknod -m 666 dev/console c 5 1
mknod -m 666 dev/null c 1 3
将上述命令写到脚本文件create_rootfs_bash中
修改该文件的属性chmod +x create_rootfs_bash
在rootfs的上一层执行该脚本即可
2 建立动态链接库
利用友善之臂提供的根文件包中的。
cp -rfd .../root_qtopia/lib/*so* .../rootfs/lib/
3 编译并安装内核模块
make modules ARCH=arm CROSS_COMPILE=arm-linux-
make modules_install ARCH=arm INSTALL_MOD_PATH=/root/src/mini2440/rootfs
4 交叉编译busybox
tar -zxf busybox-1.13.3-mini2440.tgz
cd busybox-1.13.3
4.1
vi Makefile
修改:
CROSS_COMPILE ?=arm-linux- //第164 行
ARCH ?=arm //第189 行
4.2 make menuconfig 配置
Makefile:422: *** Mixed implicit and normal rules. stop
Makefile:1270: *** Mixed implicit and normal rules. stop
是make版本差异导致的
把422行
config %config: scripts_basic outputmakefile FORCE
$(Q)mkdir -p include
$(Q)$(MAKE) $(build)=scripts/kconfig $@
$(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease
改为
%config: scripts_basic outputmakefile FORCE
$(Q)mkdir -p include
$(Q)$(MAKE) $(build)=scripts/kconfig $@
$(Q)$(MAKE) -C $(srctree) KBUILD_SRC= .kernelrelease
把1270行
/ %/: prepare scripts FORCE
$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1)
$(build)=$(build-dir)
改为
%/: prepare scripts FORCE
$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1)
$(build)=$(build-dir)
修改完毕后便可以进行busybox的配置
进入busybox setting->
build options->
选中build busybox as a static binary,静态链接
cross compiler prefix(arm-linux-)
install options->
选中"Dont use/usr",避免busybox被安装到宿主系统的/usr目录下
Busybox Library Tuning->
选中Username completion和Fancy shell prompts,否则板子上的命令提示符不会变
4.3 编译busybox
make
如果出现,networking/interface.c:818: error: `ARPHRD_INFINIBAND' undeclared here (not in a function)
则可以:将networking/interface.c文件的818行修改为“.type = -1”,然后再次编译
make CONFIG_PREFIX=/root/src/mini2440/rootfs install
如果成功,会出现如下信息:
--------------------------------------------------
You will probably need to make your busybox binary
setuid root to ensure all configured applets will
work properly.
--------------------------------------------------
在/root/src/mini2440/rootfs/sbin目录下查看是否有init,如有则证明busybox安装成功
5 建立etc 目录下的配置文件
5.1 在目录etc下创建文件mdev.conf。
我们可以通过文件mdev.conf自定义一些设备节点的名称或链接来满足特定的需要,但在此处让它为空。
#touch etc/mdev.conf
5.2 将主机 etc 目录下的passwd、group、shadow文件拷贝到 root_fs/etc目录下
#cp -f /etc/passwd /etc/group /etc/shadow etc
5.2.1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
5.2.2 /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
ftp:x:50:
nobody:x:99:
5.2.3 /etc/shadow
root:$6$hnswPTgxzFaZHlLl$WMMV0Av6O6c4RA4pwpVSgcKSiURhUlP5dxF3/MKEZlGzNXhoWMQeZA1rdf1z7VQbrrmOZe7YHw1rIQmAc8BNK/:14819:0:99999:7:::
bin:*:14715:0:99999:7:::
daemon:*:14715:0:99999:7:::
ftp:*:14715:0:99999:7:::
nobody:*:14715:0:99999:7:::
5.3 将busybox,etc目录下的所有文件拷贝过来
cp -rf .../busybox-1.13.3/examples/bootfloppy/etc/* etc
5.3.1 修改文件etc/inittab如下
::sysinit:/etc/init.d/rcS
s3c2410_serial0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a –r
5.3.2 修改文件etc/init.d/rcS如下:
#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
/bin/hostname lhz
echo "----------mount all----------"
/bin/mount -a
echo /sbin/mdev>/proc/sys/kernel/hotplug
mdev -s
echo "***************done********************"
5.3.3 修改文件etc/fstab如下:
#device mount-point type option dump fsck order
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
mdev /dev ramfs defaults 0 0
5.3.4 文件/etc/profile修改如下:
# Ash profile
# vim: syntax=sh
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1
USER="`id -un`"
LOGNAME=$USER
PS1='[u@h W]# '
PATH=$PATH
HOSTNAME=`/bin/hostname`
export USER LOGNAME PS1 PATH
6 制作文件系统
7 启动内核
tftp 30008000 uImage
bootm 30008000