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

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/fstabproc /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里的文件或目录.


piease press Enter to activate this console (请按Enter键激活控制台)

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

  1. 树莓派Linux内核编译、文件系统、Linux内核驱动基础框架、驱动测试步骤、总线地址

    树莓派高阶开发课程 1. ubuntu18.04版本安装          让程序猿搭建环境太搞笑了,轻松easy! ========================================= ...

  2. 嵌入式Linux内核以及根文件系统制作

    内核制作 注意: 我测试的使用nandflsh中bootloader启动,sd卡bootloader启动有问题 制作嵌入式平台使用的Linux内核,方法和制作PC平台的Linux内核基本一致. 清除原 ...

  3. linux rootfs 编译,rootfs文件系统制作

    rootfs文件系统制作笔记 环境:XC2440 linux2.32.2红帽5 根文件系统有一系列的目录组成,其中包括应用程序.C库.及相关的配置文件. 制作根文件系统的步骤如下,下面步骤均在虚拟机终 ...

  4. Linux拉取代码启动镜像,基于Linux源代码及Busybox源代码制作精简可启动内核镜像技术实验方法...

    基于Linux源代码及Busybox源代码制作精简可启动内核镜像技术实验方法总结 熊海泉 内核源代码 下载地址 这里下载的是linux-2.6.38.tar.bz源代码 下载地址 这里下载的是busy ...

  5. Linux内核编译基础

    2.6  Linux内核编译基础 当完成对Linux内核的配置以后,此时仍然以源代码的方式存在,不能直接下载到嵌入式系统中运行,因此,需要对内核进行编译,生成最终可以在嵌入式系统上运行的可执行代码. ...

  6. 【原创】IP摄像头技术纵览(一)---linux 内核编译,USB摄像头设备识别

    IP摄像头技术纵览(一)- linux 内核编译,USB摄像头设备识别 开始正文之前先来认识一下我的开发环境: 系统:ubuntu 10.04 开发板:AT91SAM9260 + Linux-2.6. ...

  7. 【转】LINUX内核编译步骤详细介绍

    from: http://blog.csdn.net/do2jiang/article/details/4201203 LINUX内核编译步骤详细介绍 到www.kernel.org 下载 Linux ...

  8. LINUX内核编译步骤详细介绍

    LINUX内核编译步骤详细介绍 到www.kernel.org 下载 Linux-2.6.18.2.tar.bz2 tar –jxvf  Linux-2.6.18.2.tar.bz2 -C /usr/ ...

  9. linux中内核4c,Linux内核编译

    年纪大了,记性不好,这篇文档作为自学笔记,也算是积累,给自己一个交待. Linux内核编译的大致流程如下: 一.获取内核代码:编译内核代码之前一定要获取到内核代码,到http://www.kernel ...

最新文章

  1. λ-矩阵(初等因子)
  2. NiftyNet开源平台使用
  3. Qt::Key_Return和Qt::Key_Enter区别
  4. (七)SpringBoot+SpringCloud —— 集成断路器
  5. Linux下监视NVIDIA的GPU使用情况
  6. 票价最低10元 北京大兴国际机场线票价方案正式启用
  7. Truncate Table 删除表内容避免产生过多日志
  8. SpringMVC控制类的Controller方法返回值
  9. web前端开发最佳实践_Web开发人员和设计师的最佳黑色星期五优惠
  10. 如何在Mac上设置QLab工作区
  11. 一图看懂对抗神经网络中判别器怎么工作的
  12. office2007怎么卸载干净?
  13. 戴尔服务器技术响应表,戴尔PowerEdge T110 II产品技术白皮书
  14. kali linux安全牛教程,Kali Linux渗透测试(安全牛)最新完整版教程160G
  15. 回顾一年的IT学习历程与大学生活
  16. 01.自我意识的觉醒
  17. Cortex-A 系列处理器
  18. Flume笔记二:案例
  19. 论文写作 1: 学术论文的基本概念
  20. 超好用的奈飞Netflix客户端:Netflix for Mac

热门文章

  1. CPU上下文切换、进程上下文、中断上下文
  2. 解决新能源汽车充电桩数量不足和充电时间过长的问题的思路
  3. jupyter notebook打不开浏览器 或出现端口被占用该如何解决
  4. 机器学习-46-ML-02-Gradient Descent as LSTM(元学习-用LSTM做Gradient Descen)
  5. 【转】给一些准备进银行IT部门的同学的建议
  6. redis重启后mysql丢失_Windows系统Redis重启后数据丢失的处理办法(待测)
  7. [原]Blog 手记
  8. C++STL Iterator和traits
  9. 深入理解JDK中的Reference原理和源码实现
  10. 计算机SCI论文,如何写吸引人的摘要? - 易智编译EaseEditing