您尚未登录。

楼主 #1 2018-03-31 21:26:50

1066950103
会员
注册时间: 2017-11-17
已发帖子: 61
积分: 46

关于内核启动起来加载根文件问题 busybox ramdisk buildroot ext4

关于linux内核启动起来加载根文件的疑惑,linux启动起来挂载根文件必须要ramdisk么?ramdisk 必须包含些什么呢?ramdisk里面必须包含busybox所制作的命令么?ramdisk 是建立在内存上的我们平时移植了软件可以放在里面,但是软件大了放在里面必然消耗过多内存这肯定不划算。所以大一点的软件必须放在ubi yaffs2 ext4…… 等格式的文件系统里面。为了减少移植麻烦我们一般选择buildroot来选择软件,make之后会生成文件系统里面包含了busybox的命令。这样感觉busybox就重复了。感觉这块有点模糊,那个大神讲讲这些知识点之间的关系呢,实际项目中这几个关键词(busybox ramdisk buildroot ext4 )到底是怎么个关系。

离线

楼主 #3 2018-03-31 22:43:36

1066950103
会员
注册时间: 2017-11-17
已发帖子: 61
积分: 46

Re: 关于内核启动起来加载根文件问题 busybox ramdisk buildroot ext4

谢谢 晕哥大神的指点。
1.linux内核启动的根文件是谁它不关心,直接指定即可。这个我明白了。
2.ramdisk 里面也会包含linux基本命令对吧,这基本命令是busybox产生的么?
3.buildroot 里面可以不选用busybox 继续用ramdisk里面的busybox的linux基本命令?
4.关于buildroot生成目标平台工具,以ffmpeg为例子吧,在嵌入式产品里面要用它肯定要裁剪的。如果不用buildroot 那么可以使用./configure 来添加或者删除编解码器 等组件。请问buildroot里面它是怎样裁剪ffmpeg的呢?

离线

楼主 #5 2018-03-31 22:58:08

1066950103
会员
注册时间: 2017-11-17
已发帖子: 61
积分: 46

Re: 关于内核启动起来加载根文件问题 busybox ramdisk buildroot ext4

1.假设我系统构建采用ramdisk+ext4 ramdisk里面包含了用busybox生成的linux基本命令,ext4里面是buildroot生成的文件系统的,那ramdisk 用起来之后怎样在去用ext4里面的buildroot呢? ramdisk和ext4 这两个里面都有{/bin,/sbin,/usr/sbin/,/usr/bin} 这些目录对吧?
2.buildroot 难道就不裁剪那里面的软件?不进行configure 的话 应该是不会有Makefile的呢!

离线

楼主 #7 2018-04-01 09:24:38

1066950103
会员
注册时间: 2017-11-17
已发帖子: 61
积分: 46

Re: 关于内核启动起来加载根文件问题 busybox ramdisk buildroot ext4

晕哥 说:

1. ext4 ramdisk?很少这么干吧?
你是这么做的?
https://unix.stackexchange.com/questions/401295/how-can-i-create-an-ext4-ramdisk

mkdir /mnt/ramdisk
mount -t ramfs ramfs /mnt/ramdisk
dd if=/dev/zero of=/mnt/ramdisk/ext4.image bs=1M count=512
mkfs.ext4 /mnt/ramdisk/ext4.image
mkdir /mnt/ext4ramdisk
mount -o loop /mnt/ramdisk/ext4.image /mnt/ext4ramdisk
But remember, ext4 was not designed to use in ram! tmpfs and ramfs are always better choice in ram than any disk-based filesystem.

如上, 如果 ext ramdisk 挂载目录是 /mnt/ext4ramdisk, 那ls 的访问路径是 /mnt/ext4ramdisk/ls, 以此类推。

2. Makefile仍然有的,只是控制不够精细,非常粗糙的。
Makefile肯定有生成的, 比如Qt
output/build/qt5base-5.9.1/Makefile
当然这个目录还会生成buildroot相关的隐藏文件:

-rw-r--r-- 1 root root 0 Nov 14 10:30 .stamp_built
-rw-r--r-- 1 root root 0 Nov 14 09:47 .stamp_configured
-rw-r--r-- 1 root root 0 Nov 14 09:32 .stamp_downloaded
-rw-r--r-- 1 root root 0 Nov 14 09:32 .stamp_extracted
-rw-r--r-- 1 root root 0 Nov 14 09:32 .stamp_patched
-rw-r--r-- 1 root root 0 Nov 14 10:31 .stamp_staging_installed
-rw-r--r-- 1 root root 0 Nov 14 10:31 .stamp_target_installed

比如如果删掉 .stamp_built, 会重新编译Qt, 删掉.stamp_target_installed会重新把Qt库安装到output/target目录.

我没有按照1那种情况来想,我昨天算想明白了怎么个过程了。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn