制作根文件系统的经验

《嵌入式linux应用开发完全手册 第17章》

farsight大纲ppt 根文件系统制作》

1.首先要知道各个文件和文件夹及其意义。

1.1 必要的文件和文件夹:

至少要在/bin, /dev, /etc, /lib, /sbin, /usr/bin, /usr/sbin这几个目录里面填入原始的应用程、库和初始化脚本,才能使系统跑起来。

sys,proc,tmp, mnt是空的,没必要往里面塞东西,系统启动后,内核会在里面放系统文件。

|-- bin
|-- dev
|   |-- console
|   `-- null
|-- etc
|   |-- fstab
|   |-- init.d
|   `-- inittab
|-- lib
|-- linuxrc -> bin/busybox
|-- mnt
|-- proc
|-- root
|-- sbin
|-- sys
|-- tmp

`-- usr
    |-- bin
    `-- sbin

1.2.科学地规划程序文件目录:

/bin: 普通用户和root用户都能执行的基本程序。

/sbin: oot用户都能执行的基本程序。

/usr/bin: 更多非必需的用户程序。

/usr/sbin: 更多非必需的root工具程序。

1.3. 库文件的放置:

/lib: 系统和基本命令需要的动态库

/usr/lib:所有的其他库

/usr/lib/xxx: 一些工具包的私有库,如/usr/lib/perl5

2.启动过程

内核启动的最后一步就是启动init进程,代码在init/main.c文件中。

static int noinline init_post(void)

{

if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
        printk(KERN_WARNING "Warning: unable to open an initial console.\n");
  ...

if (ramdisk_execute_command) {
        run_init_process(ramdisk_execute_command);
        printk(KERN_WARNING "Failed to execute %s\n",
                ramdisk_execute_command);
    }

run_init_process("/sbin/init"); //run_init_process一旦发现并执行了init,就不会再执行下面的几个init文件了。如果没有发现,就继续在下一个地方寻找init,依次类推。
    run_init_process("/etc/init");
    run_init_process("/bin/init");
    run_init_process("/bin/sh");

panic("No init found.  Try passing init= option to kernel.");

}

2.1 init程序执行的几个阶段:  (farsight 《根文件系统制作》 )

a, 设置init信号句柄

b, 初始化consoles

c, 解析inittab, 若不存在这是用默认值。

# /etc/inittab
::sysinit:/etc/init.d/rcS
s3c2410_serial0::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r

d, 运行系统初始化脚本/etc/init.d/rcS

这里可以做很多事情:重新挂载根文件系统挂载附加的文件系统,初始化并启动网络接口,启动一些系统守护进程和应用程序等。

# vi /etc/init.d/rcS
#!/bin/sh
ifconfig eth0 192.168.2.111

mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

mount -a 是自动挂载 /etc/fstab 里面的东西。

# cat /etc/fstab
# device     mount-point    type   options        dump  fsck order
proc           /proc        proc   defaults        0     0
tmpfs          /tmp         tmpfs  defaults        0     0
sysfs          /sys         sysfs  defaults        0     0
tmpfs          /dev         tmpfs  defaults        0     0

e, 运行inittab中所有action为wait的命令

f, 运行inittab中所有action为once的命令

g, 循环运行inittab所有action为respawn, askfirst的命令。

3. 如何部署lib中的动态库文件:

3.1 找出需要的库文件: arm-linux-readelf -a "your exe file" | grep "Shared"

[[email protected] fs_mini_mdev]# arm-linux-readelf -a bin/busybox  | grep "Shared"
 0x00000001 (NEEDED)                     Shared library: [libcrypt.so.1]
 0x00000001 (NEEDED)                     Shared library: [libm.so.6]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]

 3.2 删除库文件中的调试段等信息以缩小文件系统的大小

  cd "lib_dir" 

  arm-linux-strip *.so

时间: 2024-08-25 00:21:05

制作根文件系统的经验的相关文章

详解制作根文件系统

制作根文件系统的大致步骤: 1.编译/安装busybox,生成/bin ./sbin./usr/bin./usr/sbin目录 2.利用交叉编译工具链,构建/lib目录 3.收工构建/etc目录 4.手工构建最简化的/dev目录 5.创建其他空目录 6.配置系统自动生成/proc目录 7.利用udev构建完整的/dev目录 8.制作根文件系统的jffs2映像文件

第4阶段——制作根文件系统之分析init_post()如何启动第1个程序(2)

本节目标: (1) 了解busybox(init进程和命令都放在busybox中) (2) 创建SI工程,分析busybox源码来知道init进程做了哪些事情 (3)  分析busybox中init进程 init_main() (3.1)熟悉init进程的inittab配置文件(位于/etc/inittab) (3.2)熟悉inittab配置文件中不同action的子进程区别 (3.3)了解init进程如何读取分析inittab,以及运行inittab文件中的各个子进程 (4) 了解制作一个最小

制作根文件系统、使用NFS烧写、编译使用驱动程序(2)

1.制作根文件系统 1.1 先解压文件系统,/wok/nfs_root 目录下是已经构造好的各种文件系统:① fs_mini.tar.bz2 是最小的根文件系统,里面的设备节点是事先建立好的:② fs_mini_mdev.tar.bz2 是最小的根文件系统,里面的设备节点是等系统启动后使用mdev 自动建立的:③ fs_qtopia.tar.bz2 是 JZ2440 使用的支持触摸屏的根文件系统:④ fs_xwindow.tar.bz2 是书上的基于 X 的根文件系统. 执行

使用BusyBox制作根文件系统

1.BusyBox简介 BusyBox 是很多标准 Linux 工具的一个单个可执行实现.BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大.更复杂的工具,例如 grep.find.mount 以及 telnet:有些人将 BusyBox 称为 Linux 工具里的“瑞士军刀”. BusyBox 揭露了这样一个事实:很多标准 Linux 工具都可以共享很多共同的元素.例如,很多基于文件的工具(比如 grep 和 find)都需要在目录中搜索文件的代码.当这些工具被

第4阶段——制作根文件系统 (4)

在上节制作busybox后(位于/work/nfs_root/mini_fs), 然后根据以下5个来构建最小根文件系统: (1)/dev/console(终端控制台, 提供标准输入.标准输出以及标准错误) /dev/null  (表示空设备终端, 所有写到这个文件中的数据都会被丢弃掉.) (2)init进程的程序(也就是busybox,因为init程序位于busybox中,已经完成) (3)/etc/inittab(用于init进程读取配置, 然后执行inittab里的指定应用程序) (4)应用

第4阶段——制作根文件系统之编译配置安装busybox(3)

在上一节分析出制作一个最小的根文件系统至少需要: (1)/dev/console(终端控制台, 提供标准输入.标准输出以及标准错误) /dev/null  (为空的话就是/dev/null, 所有写到这个文件中的数据都会被丢弃掉.) (2)init进程的程序(也就是busybox,因为init程序位于busybox中) (3)/etc/inittab(用于init进程读取配置, 然后执行inittab里的指定应用程序) (4)应用程序(被inittab配置文件调用的应用程序) (5)C库(gli

tiny4412 busybox制作根文件系统rootfs nfs 挂载 ubuntu 14.04

http://blog.csdn.net/liudijiang/article/details/50555429(转) 首先得要有制作好的uboot和linux内核镜像zImage,先烧录到sd卡里,这个是已经做好了的工作. 一,ubuntu上先设置好nfs服务 1.新建一个要挂载的文件 [email protected]:~/share$ pwd /home/liudijiang/share 我已经建好了,这是我的路径 2.安装nfs服务 [email protected]:~/share$

使用busybox1.21.1制作根文件系统

1. 下载源码 https://busybox.net/downloads/ 2. 解压 3. 修改Makefile ~/busybox-1.21.1$ vi Makefile 164行: 修改前:CROSS_COMPILE ?= 修改后:CROSS_COMPILE ?= arm-linux-gnueabihf- 190行: 修改前:ARCH ?= $(SUBARCH) 修改后:ARCH ?= arm 4. 配置 ~/busybox-1.21.1$ make menuconfig Busybox

linux系统移植和根文件系统制作

1.1 Linux内核基础知识 在动手进行Linux内核移植之前,非常有必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起. 1.1.1  Linux版本 Linux内核的版本号可以从源代码的顶层目录下的Makefile中看到,比如2.6.29.1内核的Makefile中: VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 29 EXTRAVERSION = .1 其中的“VERSION”和“PATCHLEVEL”组成主版本号,比如2.4.2.5.