嵌入式linux根文件系统制作(经典) 下载本文

wait: 告诉init必须等到相应的进程完成之后才能继续执行

once:仅执行相应的进程一次,而且不会等待它完成 ctratldel: 当按下Ctrl+Alt+Delete组合键时,执行相应的进程

shutdown: 当系统关机时,执行相应的进程

restart: 当init重新启动时,执行相应的进程,通常此处所执行的进程就是init本身

以下是我的usblinux的inittab文件

::sysinit:/etc/init.d/rcS

::respawn:/sbin/getty 115200 tty1

tty2::askfirst:-/bin/sh tty3::askfirst:-/bin/sh ::restart:/sbin/init ::ctrlaltdel:/bin/umount -a -r

这个inittab执行下列动作

1. 将/etc/init.d/rcS设置成系统的初始化文件

2. 在115200 bps的虚拟终端tty1上启动一个登陆会话 (注意getty的用法)

3. 在虚拟终端tty2和tty3上启动askfirst动作的shell 4. 如果init重新启动,将/sbin/init设置成它会执行的程序

5. 告诉init,在系统关机的时候执行umount命令卸载所有文件系统,并且在卸载失败时用只

读模式冲新安装以保护文件系统。

1、busybox的inittab与pc使用的inittab不同,第一ID并不是随便取名字的,这个名字要与/dev/

目录下是否有对应的文件对应

对应错误

can't open /dev/0: No such file or directory

process '-/bin/sh' (pid 789) exited. Scheduling for restart.

can't open /dev/0: No such file or directory

process '-/bin/sh' (pid 793) exited. Scheduling for restart.

2、出现下面这种错误:

process '-/bin/sh' (pid 789) exited. Scheduling for restart. process '-/bin/sh' (pid 794) exited. Scheduling for restart. process '-/bin/sh' (pid 796) exited. Scheduling for restart. process '-/bin/sh' (pid 798) exited. Scheduling for restart.

对应的inittab文件中有 ttyS0::askfirst:-/bin/sh

虽然在/dev/目录下有ttyS0设备,但是这个设备显然不可用,所以才会出现上面的错误

3、当在inittab中同时定义的两个在同一个串口终端登陆的语句时

::askfirst:-/bin/sh

s3c2410_serial0:23456:respawn:/sbin/getty -L s3c2410_serial0 115200 vt100

出现的情况就是被抢占,不能接收任何串口输入

4、bad inittab entry 多半时因为非法字符造成的。

5、busybox中的字段runleve也没有运行时的运行级别的概念

6、分析一下启动的过程 1. 为init设置信号处理过程

2. 初始化控制台 3. 剖析/etc/inittab文件

4. 执行系统初始化命令行,缺省情况下会使用/etc/init.d/rcS 5. 执行所有导致init暂停的inittab命令(动作类型:wait)

6. 执行所有仅执行一次的inittab(动作类型:once) 一旦完成以上工作,init进程便会循环执行以下进程:

1. 执行所有终止时必须重新启动的inittab命令(动作类型:once)

2. 执行所有终止时必须重新启动但启动前必须询问用户的inittab命令(动作类型:askfirst) 初始化控制台之后,BusyBox会检查/etc/inittab文件是否存在,如果此文件不存在,BusyBox会使用缺省的inittab 配置,它主要为系统重引导,系统挂起以及init重启动设置缺省的动作,此外它还会为四个虚拟控制台(tty1到tty4)设置启动shell的动作。如果未建立这些设备文件,BusyBox会报错。

7、网上有人问“-”的作用

我很纳闷:

:: respawn:-/bin/sh

这个-是干什么的,为什么有的时候有有的时候没有???

还有啊,我从网上看到一个例程,如下,节选:

::respawn:-/bin/sh tty2::askfirst:-/bin/sh

我搞不清两个的区别,这样控制台就启动了,是第一句启动的还是第二句,那我内核启动参数里面的

console=ttyS0会自动来找这个控制台??? 原帖由 wavezone 于 2008-8-22 16:34 发表

我很纳闷:

:: respawn:-/bin/sh

这个-是干什么的,为什么有的时候有有的时候没有???

还有啊,我从网上看到一个例程,如下,节选:

::respawn:-/bin/sh tty2::askfirst:-/bin/sh 我搞不清两个的区别 ...

测试的时候是这样的,加上”-”的语句会在登陆终端之后调用/etc/目录下的profile文件,而不加”-”

的不会执行这个脚本。

其实登陆终端的命令有几种方便,但是标准的还是使用getty来登陆,但是直接使用如上的语句也是

可以的,并且兼容性强一点,因为它不需要指定对应的串口设备。

::askfirst:-/bin/sh

s3c2410_serial0::askfirst:-/bin/sh

::askfirst:-/bin/sh

s3c2410_serial0:23456:respawn:/sbin/getty -L s3c2410_serial0 115200 vt100

都是可用的。

8./bin/sh: XXX not found arm-linux-readelf -d xxx 查看你的以用程序依赖哪些库

一般是因为缺少libc.so.6造成的,实际还是根文件系统的问题,没有将常用的库文件拷贝到/lib目录

常用的库:

[root@centos lib]cp /usr/local/arm/3.4.1/arm-linux/lib/ld* . [root@centos lib]cp /usr/local/arm/3.4.1/arm-linux/lib/libc-2.3.2.so . [root@centos lib]cp /usr/local/arm/3.4.1/arm-linux/lib/libc.so.6 . [root@centos lib]cp /usr/local/arm/3.4.1/arm-linux/lib/libm * . [root@centos lib]cp /usr/local/arm/3.4.1/arm-linux/lib/libcrypt* .

9、错误insmod: chdir(2.6.26.6): No such file or directory

网上有人提出这种解决方法:

需要注意的是insmod等模块加载命令需要从lib/modules/2.6.26.6

的目录下加载模块,所以必须先建立此目录,然后将模块放到此目录下面,否则将出现以下两种情况: 一是没有建立lib/modules/2.6.26.6目录,取决于内核版本号,将出现insmod: chdir(2.6.26.6):