使用buildroot创建自己的linux镜像
参考:https://www.douyin.com/user/self?from_tab_name=main&modal_id=7490163298348895515&showTab=like
跟着教程一步步进行,可以制作一个最简的linux镜像img,可以直接通过虚拟机运行。
部署环境为ubuntu22
一、Linux源码和buildroot下载
-
查看网站:https://kernel.org/,可以看到最新的linux源码,目前为6.16.7。
-
继续搜索buildroot,下载最新的版本到ubuntu并解压缩:https://buildroot.org/download.html
二、创建内核、文件系统
- 在buildroot目录中,使用
make menuconfig
打开设置界面。
- 在Target options中,选择架构为x86_64
- 选择内核版本为最新的内核:
- 在system configuration中,设置用户名,和root密码:
- 在Kernel中,勾选Linux Kernel,并勾选将内核放置在/boot路径中,直接生成带内核的文件系统。
- 在Filesystem images中,勾选tar the root filesystem, 不需要压缩。
- 最后安装一个htop的包,方便测试。使用/进行搜索,如图,然后按1即可达到对应设置,进行勾选。
- 进行保存,保存为.config用于后续的编译。
- 使用make或者make -j$(nproc)进行多核编译,但是要有科学上网环境,会需要从github下载文件。
- 最后生成的文件在output/iamges中,如下,选择rootfs.tar这个文件系统即可,里面包含了内核在/boot中。
三、创建bootloader和镜像
- 由于运行在x86_64中,设备树不需要,剩下的是由bootloader,这里使用extlinux进行创建。使用apt install extlinux安装。
- 使用truncate创建一个img文件,并将其使用mkfs.ext4格式化,然后使用mount进行挂在,例如mnt。
- 将rootfs.tar解压到mnt中。
- 然后再mnt/boot中创建一个extlinux文件夹,使用extlinux --install extlinux建立基本bootloader,如下图:
- 需要自己创建一个extlinux.conf文件,里面内容如下
DEFAULT primaryLABEL primaryMENU LABEL My Linux-X86_64-kerne1-6.14LINUX /boot/bzImageAPPEND root=/dev/sda rw
- 完成上述操作后,即可umount mnt。这个img就成功了。
四、验证img
- 使用qemu虚拟机工具,运行这个img,并检查能够使用htop指令。
qemu-system-x86_64 -hda disk.img
- 运行后,使用root和设置的密码进行登录。使用htop进行检查:
五、总结
- 使用buildroot,整体还是简单的,配置简单,生成文件比较小,适合嵌入式系统。
- 创建后,直接包含了文件系统和内核,后只需要安装一个bootloader即可
- 对于其他结构,可能需要下载默认config方便配置。