Linux内核编译+Busybox文件系统制作(基础)

2023-10-29

本人小白纯属爱好折腾了好久,希望分享对小白有所帮助!

linux-5.15.1,5.14.14版本都可以,编译linux-4.9.229 出错提示
cc1: error: ‘-fcf-protection’ is not compatible with this target,
其他版本没试过。

使用的工具版本

linux发行版: Ubuntu 21.10
直接下载Linux-5.10.79
Linux内核各版本下载
下载文件系统工具: busybox-1.34.1

参考文章
http://www.jinbuguo.com/kernel/longterm-linux-kernel-options.html
https://www.bilibili.com/read/cv11271232

安装编译环境 ( 如果还缺什么根据编译提示自己加 )

apt install git gcc fakeroot build-essential libncurses-dev xz-utils libssl-dev bc flex libelf-dev bison liblz4-tool

编译linux内核

创建一个目录

mkdir linux-busybox

把下载 linux内核和buxybox 放到目录 linux-busybox 里然后解压

tar -xzvf linux-5.10.79.tar.xz
tar -xjvf busybox-1.34.1.tar.bz2  

进入linux-5.10.79内核跟目录执行下面命令

指定体系结构

export ARCH=x86

在根目录生成一个配置文件.config

make x86_64_defconfig

打开配置菜单界对.config做进一步设置

make menuconfig

(启动make menuconfig 时终端窗口不能太小,否则会启动失败)

设置选项

General setup —>
   [ * ] Initial RAM filesystem and RAM disk (initramfs/initrd) support

Device Drivers —>
   [ * ] Block devices —>
         < * > RAM block device support
            (16) Default number of RAM disks (NEW)
           (65536) Default RAM disk size (kbytes) (NEW)

如图设置

*******************************************************************
说明:(英文不好, 机翻+猜)

设置选项功能,所以箭头键选择,空格键或y、n、m回车键来进行设置。

支持初始RAM文件系统和RAM磁盘(initramfs/initrd)
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

RAM块设备支持
RAM block device support

RAM磁盘的默认数量(NEW)
(16) Default number of RAM disks (NEW)

默认RAM磁盘大小(kbytes)(NEW), 按回车键填入65536
(65536) Default RAM disk size (kbytes) (NEW)

个人理解:linux启动后挂载基于内存的文件系统,
所以要设置上面选项给与支持,否则会出现
end kernel panic not syncing VFS Unable to mount root fs on unknown block 就是无法在未知块上挂载根文件系统 。
还有 65536处默认是4096也会出现错误可能是大小了
看网上的设置65536就成功了
**************************************************************

编译内核

make

如果编译成功,内核默认在目录 arch/x86_64/boot/bzImage

如果编译失败, 可能需要删除一些文件才能再次编译,可以按需要使用下面命令

make clean
删除大多数生成的文件,但保持配置和
有足够的构建支持来构建外部模块
make  mrproper
删除所有生成的文件,+,配置,+,各种备份文件

制作文件系统

进入busybox-1.34.1根目录

启动菜单配置选项

make menuconfig

Settings —>
  — Build Options
  [*] Build static binary (no shared libs)

就是构建静态二进制,这样就不用依赖动态库了

编译安装

make && make install

You will probably need to make your busybox binary setuid root to ensure all configured applets will work properly.
出现这个提示不是报错!

完成编译安装, 会在busybox-1.34.1根目录多出个_install目录.

进入 _install 目录,创建以下目录

mkdir -p bin sbin dev etc etc/init.d usr mnt tmp proc sys

创建并编辑文件 fstab 、inittab、rcS,分别写入下面对应内容

touch etc/fstab
vim etc/fstab

proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
touch etc/inittab
vim etc/inittab

::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
touch etc/init.d/rcS
vim etc/init.d/rcS

/bin/mount -a
mount -o remount,rw /
echo /sbin/mdev > /proc/sys/kernel/hotplug
mkdir -p /dev/pts
mount -t devpts devpts dev/pts
mdev -s

记得给它们添加执行权限

chmod 755 etc/fstab 
chmod 755 etc/inittab
chmod 755 /init.d/rcS

进入目录 dev 创建设备文件

cd dev
mknod console c 5 1
mknod null c 1 3
mknod tty1 c 4 1

回到busybox1.34.1根目录创建shell脚本文件

cd ../../
touch abc.su 
vim abc.su

写入代码

#!/bin/bash
umount ./fs
rm -rf rootfs.ext3
rm -rf fs
dd if=/dev/zero of=./rootfs.ext3 bs=1M count=32
mkfs.ext3 rootfs.ext3
mkdir fs
mount -o loop rootfs.ext3 ./fs
cp -rf ./_install/* ./fs
umount ./fs
gzip --best -c rootfs.ext3 > rootext4fs.img.gz

给脚本添加执行权限然后执行

chmod 755 abc.cu
./abc.su

使用虚拟机qemu运行
安装qemu x86平台

apt install qemu-system-x86

进入目录linux-busybox在终端输入

qemu-system-x86_64 -kernel ./linux-5.10.79/arch/x86_64/boot/bzImage -initrd ./busybox-1.34.1/rootfs.img.gz -append "root=/dev/ram init=/linuxrc" -serial file:output.txt

-append “ ”里的内容路径 / 应该是文件系统roofs.img.gz的根路径, 所以这里的ram 和linux 是文件系统rootfs.img.bz里的文件或目录.

qemu启动成功后
piease press Enter to activate this console (请按Enter键激活控制台)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux内核编译+Busybox文件系统制作(基础) 的相关文章

随机推荐

  • 手机经常提示找不到服务器,为什么我的手机显示无法连接到服务器

    lujb31612级分类 其他被浏览3227次2014 10 13 yaorong319 采纳率 50 6级2014 10 14 您好 若手机显示已连接无线网络 但是依然无法上网 建议您 1 把手机关机重启 路由器复位 然后重新连接无线网络
  • Ubuntu (20.4,最新版)安装及简单入门操作

    1 打开VMare WorkStation 点击文件 gt 新建虚拟机 gt 找到宿主机内部Ubuntu镜像的位置 镜像下载位置 https msdn itellyou cn https next itellyou cn 新版地址 Ubun
  • Java代码审计

    一 java编译篇 java编译过程 Java源代码 编译 gt Java字节码 解释器 gt 机器码 Java源代码 编译器 gt jvm可执行的Java字节码 jvm解释器 gt 机器可执行的二进制机器码 gt 程序运行 采用字节码的好
  • (一)Redis: 基于 Key-Value 的存储系统

    1 Redis 介绍与安装 1 1 Redis 基本介绍 Redis 是一种基于 Key Value 的存储系统 可用作数据库 缓存和消息中间件等 仓库地址 https github com redis redis Redis is an
  • Linux火狐浏览器无法看视频,Ubuntu使用火狐浏览器无法播放视频如何解决

    Ubuntu使用火狐浏览器无法播放视频如何解决 发布时间 2020 11 07 17 16 00 来源 亿速云 阅读 156 作者 Leah 今天就跟大家聊聊有关Ubuntu使用火狐浏览器无法播放视频如何解决 可能很多人都不太了解 为了让大
  • 取消计算机硬盘自检,教你电脑开机自检如何关闭

    教你电脑开机自检如何关闭 电脑开机自检如何关闭 1 首先 打开 系统属性 在我的电脑上点右键 属性 或者在控制面板里打开 系统 快捷键win pause break 点 高级 选项卡 在 启动和故障恢复 区里打开 设置 去掉 系统启动 区里
  • 一款好用Ventoy启动盘制作方法

    Ventoy是一个制作可启动U盘的开源工具 有了Ventoy你就无需反复地格式化U盘 你只需要把 ISO WIM IMG VHD x EFI 等类型的文件直接拷贝到U盘里面就可以启动了 无需其他操作 你可以一次性拷贝很多个不同类型的镜像文件
  • .npy文件的读取

    npy文件是numpy专用的二进制文件 以读取x npy文件为例 1 在桌面新建一个文件夹命名为test 将x npy文件放入该文件夹内 2 运行代码 import numpy as np x np load C Users 用户名 Des
  • SLAM能用的传感器

    搞懂RTK定位 看这一篇就够了 知乎 zhihu com
  • Unity基础笔记(7)—— 资源管理

    Unity资源管理 一 资源导入和导出 资源导入 将打包好的unitypackage文件直接拖拽至窗口中 Unity 会自动解析包 再点击 import 即可导入资源 资源导出 右键点击要导出的资源文件夹 点击 export 导出资源 预制
  • 编译mono-debugger-2.4出错

    usr bin ld cannot find ltermcapcollect2 ld 返回 1make fileman 错误 1 echo PKG CONFIG PATH To set the PKG CONFIG PATH value u
  • 使用jprofiler分析dump文件一个实例

    1 jstat 命令先分析一下 一次fullgc之后 old 老年代使用比例 只降低2 应该有什么大的对象常驻内存 2 可以使用jmap 命令查看对象大小 这里后面使用jprofiler 就没用这个命令 jmap histo live 72
  • 如何使用Python读写JSON文件

    1 读取JSON文件 假设我们有一个名为 data json 的文件 其内容如下 name Alice age 30 city New York 我们可以使用Python中的json模块来读取该文件并将其存储为Python对象 以下是一个读
  • NGINX proxy服务器

    1 代理原理 正向代理 内网客户机通过代理访问互联网 通常要设置代理服务器地址和端口 反向代理 外网用户通过代理访问内网服务器 内网服务器无感知 正向代理与反向代理的区别是 正向代理即是客户端代理 代理客户端 服务端不知道实际发起请求的客户
  • 西工大图书馆分拣经历的数学建模角度思考

    今天下午没课于是乎去图书馆做志愿 志愿内容简单来讲就是分拣书籍 装箱子 运走的三部曲 工作需要我们的耐心和细致 同时也要求很好的体力 做的时候我还在思考这样的一个问题 就是这件事情从数学建模角度能不能分析分析 我们所需要做出的模型假设 仅供
  • 外贸业务员专用的18个英文学习网站!

    今天 我收集了一些非常实用的英语网站 包括信息 翻译和口语等方面练习 01英语学习网站 1 https www businessenglishsite com 这个网站是由在商业领域拥有丰富经验的专业人士创建的 他们每天都使用商业英语 因此
  • WebShell工具特征流量分析合集

    目录 中国蚁剑流量抓包分析 配置代理 数据包分析 特征 中国菜刀流量抓包分析 数据包分析 特征 冰蝎流量抓包分析 配置代理 自带PhpWebshell分析 base64编码 数据包分析 弱特征 强特征 哥斯拉流量抓包分析 配置代理 生成we
  • SpringBoot异常处理

    我们在实际开发中 会因为各种问题而导致无法正常访问网址 网站的对象是群众 如果出现各种的报错信息 对于用户的体验是非常的不好的 所以我们需要对项目的内部进行异常处理 保证用户的体验舒爽 目录 1 异常处理一 默认异常处理机制 1 导入前端模
  • OneNet平台对接记录

    手头有一台支持中移动的OneNet平台的接口的烟感设备 刚好可以用来了解一下移动搭建的这套开放平台 OneNet平台简介 OneNet平台是中国移动物联网公司推出的物联网解决方案平台 对于集成了移动的物联网模块 NB IOT模块的设备 目前
  • Linux内核编译+Busybox文件系统制作(基础)

    本人小白纯属爱好折腾了好久 希望分享对小白有所帮助 linux 5 15 1 5 14 14版本都可以 编译linux 4 9 229 出错提示 cc1 error fcf protection is not compatible with