没有合适的资源?快使用搜索试试~ 我知道了~
鱼树笔记之第11课_根文件系统2
需积分: 0 0 下载量 145 浏览量
2022-08-04
13:54:56
上传
评论
收藏 2.85MB PDF 举报
温馨提示
试读
35页
1.打开一个设备: 4 1.建立 busybox 源码 SI 工程,加入全部代码 4.从默认的 new_init_action 反推默认的配置文件 5.可见,p
资源详情
资源评论
资源推荐
网名“鱼树”的学员聂龙浩,
学习“韦东山 Linux 视频第 2 期”时所写的笔记很详细,供大家参考。
也许有错漏,请自行分辨。
目录
根文件系统启动分析 .............................................................................................................................................. 3
启动根文件系统过程 .......................................................................................................................................... 3
内核如何打开第一个应用程序: .................................................................................................................... 4
1.打开一个设备: ....................................................................................................................................... 4
2.用 run_init_process 启动第一个应用程序: .................................................................................... 5
测试下: ........................................................................................................................................................ 6
根文件系统源码分析 1 ........................................................................................................................................... 8
1.建立 busybox 源码 SI 工程,加入全部代码。 ...................................................................................... 8
(1).猜测 init 程序要做的事情。 ....................................................................................................... 9
2.分析 init.c 源码: ................................................................................................................................... 9
4.从默认的 new_init_action 反推默认的配置文件。 .................................................................... 13
5.可见,parse_ininttab 解析这个 inittab 时,先打开 /etc/inittab 。 ..................................... 15
总结:最小的根文件系统需要的项:(init 进程需要) ................................................................ 18
根文件系统源码分析 2 ......................................................................................................................................... 19
最小的根文件系统需要的项: ...................................................................................................................... 19
1.配置 busybox。 .............................................................................................................................................. 19
①.首先是给嵌入式系统编译的,所以要有个 交叉编译工具 。 .............................................. 19
②.指定库。 ................................................................................................................................................. 19
③.命令补全 ................................................................................................................................................. 20
④.压缩命令 ................................................................................................................................................. 20
⑤.模块加载命令,默认也是选择上的。 ........................................................................................... 21
⑦.支持 mdev ............................................................................................................................................. 21
2.编译..................................................................................................................................................................... 21
3.安装..................................................................................................................................................................... 22
创建一个文件系统目录。 ....................................................................................................................... 22
4.创建最简单的文件系统。 ............................................................................................................................ 23
①.创建 /dev/console,/dev/NULL ................................................................................................... 23
②.init 程序本身就是 busybox,所以这一步完成。 ....................................................................... 23
③.创建 /etc/inittab 配置文件。 ......................................................................................................... 23
④.安装 glibc 库 .......................................................................................................................................... 24
⑤.将这个文件系统烧到 FLASH 上。 .................................................................................................. 25
5.完善根文件系统。 ......................................................................................................................................... 26
①.挂载虚拟的根文件系统。 ................................................................................................................. 26
②.在文件系统加 /proc 目录,修改配置文件 , ........................................................................... 27
6.完善 dev 目录。............................................................................................................................................ 29
在根目录下: ............................................................................................................................................. 29
想要用其他的文件系统格式:jffs2 ...................................................................................................... 31
③.安装 jffas2 压缩文件系统的工具: ................................................................................................ 32
④.制作 32
①.在 PC 上开启 nfs 服务并测试。 .................................................................................................... 33
②.单板挂接 ................................................................................................................................................. 34
根文件系统启动分析
启动根文件系统过程
UBOOT:启动内核
内核:启动应用程序
应用程序又是根文件系统上。(要挂接根文件系统)
执行应用程序在“init_post”这个函数中。
sys_open((const char __user *) "/dev/console", O_RDWR, 0
这里打开 /dev/console 设备。
内核如何打开第一个应用程序:
1. 打开一个设备:
open(dev/console).
(void) sys_dup(0);
(void) sys_dup(0);
(这三个文件代表标准输入,标准输出,标准错误)
写程序时经常用到 printf 标准输出,scanf 标准输入,err()标准错误。它们是指 3 个文件。
假设 open(dev/console) 是打开的第 0 个文件。sys_dup(0)是指复制的意思,
复制后是第 1 个文件,则有了第 0 个文件和第 1 个文件。第 1 个文件也是指向 dev/console
另一个 sys_dup(0) 也是复制文件,则这个是第 3 个文件,也是指向 dev/console 这个文件。
意思是,所有的 printf 打印信息都会从 dev/console 打印出来。
输入时也是从 dev/console 这个文件输入的。想输入错误信息也是从 dev/console 这个文
件输出的。这个文件 dev/console 对应终端。在我们这个例子中 dev/console 对应串口 0.
对于其他设备,这个 dev/console 可能是 键盘液晶。
2.用 run_init_process 启动第一个应用程序:
一般来说第一个应用程序运行后,就不会从系统返回了。
这个应用程序:
(1)要么是 UBOOT 传进来的命令行参数: init=linuxrc 这个样子
(2)要么是 sbin/init,要是 sbin/init 不成功,则还有 /etc/init 或 bin/init,bin/sh
如果有 execute_command 则执行:run_init_process(execute_command);
查找 execute_command 可知:
__setup("init=", init_setup);这是 UBOOT 传递给内核的命令行参数。如果
涉及了 "init=" 什么东西,显然这个 execute_command 就是等于 "init=" 后面的
东西。
如果设置了 init= 某个文件(linuxrc) ,那么这个 execute_command 就等于这个
文件(linuxrc).
if (execute_command) {
run_init_process(execute_command);
printk(KERN_WARNING "Failed to execute %s. Attempting "
"defaults...\n", execute_command);
}
则上面的意思是:如果定义了 execute_command ,则会用 run_init_process 启动这个应用
剩余34页未读,继续阅读
Jaihwoe
- 粉丝: 19
- 资源: 350
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0