使用BusyBox制作linux根系统.doc

上传人:公**** 文档编号:542992365 上传时间:2022-11-02 格式:DOC 页数:13 大小:73KB
返回 下载 相关 举报
使用BusyBox制作linux根系统.doc_第1页
第1页 / 共13页
使用BusyBox制作linux根系统.doc_第2页
第2页 / 共13页
使用BusyBox制作linux根系统.doc_第3页
第3页 / 共13页
使用BusyBox制作linux根系统.doc_第4页
第4页 / 共13页
使用BusyBox制作linux根系统.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《使用BusyBox制作linux根系统.doc》由会员分享,可在线阅读,更多相关《使用BusyBox制作linux根系统.doc(13页珍藏版)》请在金锄头文库上搜索。

1、操作系统:Ubuntu9.04内核版本:linux-2.6.24.7开发板:博创arm2410s交叉编译工具:arm-linux-gcc-4.1.1BusyBox:busybox-1.11.1 CramFS:CramFS-1.1注意:由于要制作的根文件系统使用了mdev(BusyBox简化版的udev),因此,需要内 核支持sysfs、procfs和ramfs(tmpfs)文件系统以及hotplug(uevent)事件机制。浅蓝色为命令,橘红色为 代码和脚步1、准备根文件系统使用shell脚本create_rootfs.sh,建立根文件系统的目录框架lingdubuntu:/arm2410s$

2、 vi create_rootfs.shcreate_rootfs.sh 内容如下:#!/bin/shecho -Create rootfs directons.mkdir rootfscd rootfsecho -Create root,dev.mkdir root dev etc bin sbin mnt sys proc lib home tmp var usrmkdir usr/sbin usr/bin usr/lib usr/modulesmkdir mnt/usb mnt/nfs mnt/etc mnt/etc/init.dmkdir lib/moduleschmod 1777 t

3、mpcd .echo -make direction done-为 create_rootfs.sh添加执行权限lingdubuntu:/arm2410s$ chmod a+x create_rootfs.sh执行create_rootfs.sh,建立根文件系统的目录框架lingdubuntu:/arm2410s$ ./create_rootfs.shlingdubuntu:/arm2410s$ cd rootfslingdubuntu:/arm2410s/rootfs$ lsbin dev etc home lib mnt proc root sbin sys tmp usr var2、创建

4、设备 文件mdev 是通过 init 进程来启动的,在使用 mdev 构造 /dev 目录之前,init 至少要用到设备文件/dev/console、 /dev/null ,所以需要事先建立这两个设备文件:lingdubuntu:/arm2410s/rootfs$ cd devlingdubuntu:/arm2410s/rootfs/dev$ sudo mknod -m 660 console c 204 64sudo password for lingd: lingdubuntu:/arm2410s/rootfs/dev$ sudo mknod -m 660 null c 1 3lingdu

5、buntu:/arm2410s/rootfs/dev$ ls -ltotal 0crw-rw- 1 root root 5, 1 2010-04-02 15:49 consolecrw-rw- 1 root root 1, 3 2010-04-02 15:50 null注意:本来console的主次设备号应为5和1.但是因为init在执行完/etc/init.d/rcS脚本后,就 会在一个控制台上,按照inittab的指示开一个shell(或者是开getty+login,这样用户就会看到提示输入用户名的提示符)。在mdev -s未执行之前,/dev目录下只有我们创建的/dev/null和/de

6、v/console,也就是说,没有控制台可供init用来按照inittab 的指示开一个shell。而在s3c24xx 系列芯片的串口驱动里面用了s3c2410_serial做为设备名(在内核源码的“drivers/serial/s3c2410.c”文件的949 行),因此,启动时可用s3c2410_serial0、s3c2410_serial1或s3c2410_serial2作为init用来按照 inittab的指示开一个shell的控制台,这里我用了串口0,即s3c2410_serial0(主次设备号为204和64)作为控制台。这里直接 将console当s3c2410_serial0,所

7、以console的主次设备号才会为204和64。3、准备一些配置文件和系统启动时所需的文件3.1、mdev配置文件mdev.confmdev 会在/etc目录下找mdev的配置文件: mdev.conf. 如果该文件不存在,那么在执行mdev s这个命令时,会提示找不到mdev.conf。我们不需要mdev规则,所以只是touch生成一个空文件就OK了。当然也可以根据mdev的规则来 编写mdev.conf。我把所有配置文件都是在/mnt/etc下,而不是/etc,后面解释这么做的原因。lingdubuntu:/arm2410s/rootfs/dev$ cd ./mnt/etclingdubu

8、ntu:/arm2410s/rootfs/mnt/etc$ touch mdev.conflingdubuntu:/arm2410s/rootfs/mnt/etc$ lsinit.d mdev.conf3.2、linuxrclinuxrc 位于根文件系统的顶层目录/,这里为rootfs。/Linuxrc 执行init 进程初始化文件。主要工作是把已安装根文件系统中的/etc 安装为ramfs,并拷贝/mnt/etc/目录下所有文件到/etc,这里存放系统启动后的许多特殊文件;接着Linuxrc 重新构建文件分配表inittab;之后执行系统初始化进程/sbin/init。lingdubuntu

9、:/arm2410s/rootfs/mnt/etc$ cd ./.lingdubuntu:/arm2410s/rootfs$ vi linuxrclinuxrc 内容如下:#!/bin/shecho Processing /linuxrcecho mount /etc as ramfs/bin/mount -n -t ramfs ramfs /etc /bin/cp -a /mnt/etc/* /etcecho re-create the /etc/mtab entries/bin/mount -f -t cramfs -o remount,ro /dev/bon/3 /bin/mount -

10、f -t ramfs ramfs /etcecho start initexec /sbin/initlingdubuntu:/arm2410s/rootfs$ lsbin dev etc home lib linuxrc mnt proc root sbin sys tmp usr varLinuxrc 脚本分析/bin/mount -n -t ramfs ramfs /etc 这句话的作用加载一个ramfs作为/etc目录。这样 /etc就是一个可写目录。从这个脚本可知,你的根文件系统是一个cramfs(只读文件系统),而/etc作为系统运行配置文件的存放地点,可 能会写一些运行状态在这里

11、,linuxrc第一件事情就是将一个ramfs mount到/etc只读目录中,使得/etc/目录可写,指定参数 -n的目的是告诉mount不要写/etc/mtab, 这个文件存放当前系统已挂载(mount)的文件系统清单。因为现在/etc/目录还是只读,所以这次mount不要写这个文件,否则会失败。而且 mount上后,原/etc会覆盖掉(原/etc下的文件都不见了,umount后会重新出现),所以我们把配置文件都保存在/mnt /etc,mount上ramfs到/etc后,再把配置文件拷贝到/etc。而不是直接将配置文件保存在/etc/下/bin/cp -a /mnt/etc/* /etc

12、/etc成为可写目录后,将所有/mnt/etc中的配置文件拷贝到/etc/中,这说明ramfs可能 是一个空的ramfs,没有配置文件,或者配置文件比较老。同时也说明这个系统是一个只读系统,每次系统运行中写入的配置不会保留。将以前 mount的那些信息重新写到/etc/mtab中,命令就是下面这些。/bin/mount -f -t cramfs -o remount,ro /dev/bon/3 /bin/mount -f -t ramfs ramfs /etc这些命令只是将这 些mount信息写到/etc/mtab中,不会实际去mount这些block device,说明你的根文件系统依然是以

13、前的那个/dev/bon/3exec /sbin/init执行根文件系统中的init执行 程序,使其成为1号进程。shell正式运行。3.3、rcSrcS 文件位于/etc/init.d,是busybox版init第一个运行的脚步(常见的init还有Sys V init版,其第一个执行的脚步是/etc/rc.d/rc.sysinit)。/mnt/etc/init.d/rcS 完成各个文件系统的 mount,再执行/mnt/etc/rc.local;通过rcS 可以调用ifconfig 程序配置网络。rcS 执行完了以后,init 就会在一个 console 上,按照 inittab 的指示开一

14、个 shell,或者是开 getty + login,这样用户就会看到提示输入用户名的提示符。/etc/init.d/rcS文件内容如下:lingdubuntu:/arm2410s/rootfs$ cd mnt/etc/init.dlingdubuntu:/arm2410s/rootfs/mnt/etc/init.d$ vi rcS/etc/init.d/rcS内容如下:#!/bin/shecho Processing /etc/init.d/rcSecho mount -amount -a #mount上fstab文件中所有文件系统exec /etc/rc.local3.4、/etc/rc.

15、local /etc/rc.local是被init.d/rcS 文件调用执行的特殊文件,与Linux 系统硬件平台相关,如安装核心模块、进行网络配置、运行应用程序、启动图形界面等。内容如下:lingdubuntu:/arm2410s/rootfs/mnt/etc/init.d$ cd .lingdubuntu:/arm2410s/rootfs/mnt/etc$ vi rc.local/etc/rc.local内容如下:#!/bin/shecho Processing /etc/rc.localecho get hostname/bin/hostname -F /etc/hostnameecho Starting mdevecho /sbin/mdev /proc/sys/kernel/hotplugmdev -secho ifconfig eth0 192.168.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号