fakeroot 在 buildroot 中到底做了什么
fakeroot 的意义在于创建一些root设备才能创建的设备,但是对于 字符设备这一类型,就显得无力了
但是 buildroot 中的 fakeroot 还是完成了这个使命
fakeroot 将 rootfs 打成了包,里面的dev目录有很多字符文件
但是如果你解包的话,就需要root权限了,root权限可以获得正确的设备文件
所以本质上,fakeroot 还是不能 在 真实环境下 创建 字符文件 做出来!!!
buildroot 中的fakeroot 其实是这么做的:
在fakeroot环境下(用makedevs, 参考package/makedevs/README)创建字符文件
然后打包
然后退出fakeroot环境
这也是为什么buildroot的生成物 不能为 目录,而是以tarball存在 的问题!!!
buildroot/output$ ls target/dev/ -l
total 8
lrwxrwxrwx 1 suweishuai dev 15 Jul 10 2021 fd -> ../proc/self/fd
lrwxrwxrwx 1 suweishuai dev 10 Jul 10 2021 log -> ../tmp/log
drwxr-xr-x 2 suweishuai dev 4096 Jul 10 2021 pts
drwxr-xr-x 2 suweishuai dev 4096 Jul 10 2021 shm
lrwxrwxrwx 1 suweishuai dev 17 Jul 10 2021 stderr -> ../proc/self/fd/2
lrwxrwxrwx 1 suweishuai dev 17 Jul 10 2021 stdin -> ../proc/self/fd/0
lrwxrwxrwx 1 suweishuai dev 17 Jul 10 2021 stdout -> ../proc/self/fd/1
字符设备 基于 “创建时间” 上的分类
有些必须在init进程前启动 : 第一类
有些可以在init启动过程中创建,或者是系统运行时创建 : 第二类
- 系统启动时,执行init进程前需要准备好的设备节点
目前高版本内核(实测5.4)在启动时,
如果 busybox linuxrc 启动, /etc/inittab 中的内容为 console::askfirst:-/bin/sh
只需要 console 节点这一个,而不需要null 节点,更不需要其他的设备节点
第一类节点如何创建
- 1.在/dev/中制作静态节点
- 2.CONFIG_INITRAMFS_SOURCE 指定,内核创建,参考这里
如果有 initramfs , 可以用内核创建,具体创建什么,用CONFIG_INITRAMFS_SOURCE 指定,
第二类节点如何创建
- 1.在/dev/中制作静态节点
- 2.CONFIG_INITRAMFS_SOURCE 指定,内核创建
- 3.动态设备管理机制创建,参考这里