busybox制作的rootfs,启动脚本修改定制

对于busybox做的rootfs,
linuxrc 是一个link,指向busybox
/sbin/init是一个link,指向busybox。
追根溯源,流程大致如下: init程序(linuxrc) -> busybox -> /etc/inittab -> /etc/init.d/rcS
直接在/etc/init.d/rcS脚本文件末尾添加需要的脚本代码。
我们可以修改/etc/init.d/rcS脚本,来添加我们所需要执行的命令。
在挂载完所有分区后,我们可以在/etc/init.d/rcS文件中添加我们自己的命令。
如:/sbin/ifconfig eth0 192.168.0.1
/sbin/ifconfig lo 127.0.0.1

对于启动初始化而言,/etc是最重要的目录。
/linuxrc文件中我们看到它最后运行了/sbin/init,而init又会根据/etc/inittab来运行。/etc/inittab是初始化列表,根据列表的内容,创建需要的进程。
(1)文件/etc/inittab
是init进程需要解析的文件,它的每个条目都是一个脚本或可执行程序
这是zed上的inittab的内容。
::sysinit:/etc/init.d/rcS
它运行了/etc/init.d/rcS脚本。

(2)文件/etc/fstab和 /etc/mtab
在文件/etc/init.d/rcS中执行mount –a时,就会按照文件/etc/fstab内容挂载相应的文件系统.
文件/etc/fstab就是使用mount将设备载入到系统的某个载入点所需执行的命令内容,将这些内容都写到/etc/fstab里,使得系统一启动就主动载入.
/etc/mtab同/etc/fstab的格式一样,它用于记录已经挂载的分区信息。

(3)文件/etc/passwd
当用户以telnet或ssh登录主机时,系统会出现一login画面来输入账号,此时输入账号和密码后,Linux会执行以下动作:
<1>先找/etc/passwd内是否有该账号,如果有,则将该账号与对应的UID(user ID)和GID(Group ID)读出,并将该账号的家目录与shell设置也一起读出.
<2>核对密码表,此时Linux会进入/etc/shadow中查找对应的账号与UID,然后核对已输入的密码与里面的密码是否一致.
<3>若一切相符,就进入shell控制阶段.

例如:
root❌0:0:root:/root:/bin/sh
该文件的构造如上所示,每一行都表示一个账号,有几行就表示系统中有几个账号.注意,里面的很多账号都是系统必须使用的,称作系统账号.在每个Linux系统中都会有第一行,就是root系统管理员行,每行有7个部分,用":"隔开.
1、账号名称:root表示默认的系统管理员的账号名称.
2、密码:x表示密码已经移动到shadow这个加密后的文件中了.
3、UID:当UID=0时,表示root
4、GID:与/etc/group有关,用于规范用户组.
5、用户信息说明栏:用于解释该账号的意义.
6、家目录:用户的家目录.root用户的家目录就是/root.
7、Shell:默认使用/bin/bash来执行命令.

(4)/etc/shadow
root: 1 1 1HNeU8jpc$RyzTN856sZiO.LCN2BZuZ0:14880:0:99999:7:::
该文件属于加密文件,每个账号的密码均在该文件中,这里不再赘述.

(5)/etc/profile
主要用来定义全局环境变量。
例如:
export PS1=“zynq-huskar>”
export LD_LIBRARY_PATH=/lib:/usr/lib

(6)文件/etc/init.d/rcS
该文件的功能主要有两个,
一是新建kernel所需的目录,这些目录都是kernel运行过程中所必须的.
二是将不同的文件系统挂载到根文件系统下的某个目录内;

为了方便查看提示信息,脚本中在合适的位置,随手放置echo 命令,用来打印提示信息。
例如:
echo “Starting rcS…”
echo “++ Mounting filesystem”
echo “++ Setting up mdev”
echo “++ Configure static IP 192.168.1.10”

下面来分析rcS的常规写法。

I)首先是各种mount命令。
mount -a
从配置列表中依次挂载

mount -t proc none /proc(或者mount -n -t proc none /proc)
mount -t sysfs none /sys(或者mount -n -t sysfs none /sys)
挂载"虚拟"文件系统"/proc"和"/sys"

mount -t ramfs none /dev
在/dev目录下挂载一个ramfs

mount -t tmpfs none /tmp
mount -n -t usbfs none /proc/bus/usb
mount -t devpts devpts /dev/pts
注意:
-t指明文件系统的类型,
-n只是单纯的mount,而不会去写/etc/mtab文件。否则,如果/etc在一个只读的文件系统上,写的话将引发错误。

echo /sbin/mdev >/proc/sys/kernel/hotplug
调用mdev管理程序动态的创建插拔设备。kernel在每次设备出现变动时调用上面一句传递进去的用户空间应用程序/sbin/mdev来处理对应的信息,进而mdev操作/dev目录下的设备,进行添加或删除。
mdev -s
有了这一句,内核就可以在/dev目录下自动创建设备节点。
/bin/hotplug
设置内核的hotplug handler为mdev,由mdev接受来自内核的消息并作出相应的回应,比如挂载U盘等。

II)然后是各种mkdir 命令。
mkdir -p /dev/pts
mkdir -p /dev/i2c

III)然后是各种inmod命令。
load_oled
insmod /lib/modules/`uname -r`/pmodoled-gpio.ko;

IV)然后是各种start service命令。
telnetd -l /bin/sh
httpd -h /var/www
tcpsvd 0:21 ftpd ftpd -w /&
dropbear

ifconfig eth0 down
ifconfig eth0 192.168.1.10 up

V)然后是各种exec命令。

for i in 0 1 2 3 4 5 6 7;
do
sw=$(($i+69));
led=$(($i+61));
echo $sw > /sys/class/gpio/export;
echo $led > /sys/class/gpio/export;
echo out > /sys/class/gpio/gpio$led/direction;
done;

VI)然后是各种export命令。
export PATH=$PATH:/usr/local/bin

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值