目录
准备
- linux source
- ubuntu 22.04
- Syslinux 系统引导工具
- xorriso 打包iso工具
- vmware workstation 虚拟机安装测试系统
syslinux
Syslinux
是一套轻量级的引导加载程序,设计用于简化Linux系统的安装过程,并能够从各种存储介质上启动操作系统。它特别适用于创建可引导的USB闪存盘、CD/DVD光盘以及硬盘上的Linux安装。以下是Syslinux
的一些主要用途和特点:
- 兼容广泛介质:
Syslinux
支持多种启动媒介,包括但不限于USB闪存驱动器、CD-ROM、硬盘、甚至网络引导。这使得它成为创建可携带操作环境或急救盘的理想工具。 - 易于安装和配置:相比其他引导加载器,
Syslinux
的安装和配置过程较为简单,通常只需几个简单的命令即可完成设置。 - 跨平台启动:它不仅支持传统的BIOS系统,还从6.0版开始支持UEFI系统,这意味着它能够在较新的硬件上同样有效工作。
- Live CD/DVD引导:Ubuntu的Live CD以及其他许多Linux发行版就使用了
Syslinux
家族的一员——Isolinux
,来引导他们的Live系统,无需安装即可试用或修复系统。 - 模块化和可扩展:
Syslinux
支持通过模块加载额外的功能,如支持不同文件系统、网络引导或高级用户界面,这让它能够适应多样化的启动需求。 - DOS和Linux的桥梁:它能够引导基于DOS的工具、MS-DOS/Windows操作系统,同时也能够引导各种Linux内核和初始化系统,作为多启动方案的一部分。
综上所述,Syslinux
是一个强大且灵活的工具,广泛应用于系统安装、维护、救援及多启动配置场景中。
xorriso
xorriso
是一个强大的命令行工具,主要用于创建、修改和操作 ISO 9660 文件系统映像,这是光盘上使用的标准文件系统格式。它超越了基本的 ISO 创建功能,还支持更高级的光盘映像操作,如多-session光盘、混合模式(ISO 9660 + HFS 或 UDF)光盘以及Rock Ridge扩展,后者用于在ISO映像中保持Unix/Linux文件属性,如符号链接、所有权和权限。xorriso
可以执行的任务包括:
- 创建 ISO 映像文件。
- 将数据添加到现有 ISO 映像中。
- 修改 ISO 映像中的文件和目录结构。
- 提取 ISO 映像的内容到本地文件系统。
- 将 ISO 映像刻录到 CD/DVD/BD 光盘。
- 支持 El Torito 引导标准,允许创建可引导光盘。
- 支持 Joliet 扩展,用于长文件名在Windows系统上的兼容性。
由于其灵活性和广泛的特性集,xorriso
常常被用作替代老旧的mkisofs
和cdrecord
工具的现代化解决方案,特别是在需要更复杂光盘映像操作的场景中。它也是libburnia
项目的一部分,这是一个专注于光盘烧录的自由软件库集合。
打包iso之前的目录结构
启动makeiso.sh是打包用的脚本不是必须要,可以直接执行命令行
编译linux内核
编译Linux内核时,配置是关键的一步,它决定了内核将包含哪些功能以及这些功能是以何种形式存在(例如,是否编译为模块)。以下是几种常见的内核配置方法及其特点:
-
make defconfig
- 这个命令会创建或更新
.config
文件,使用特定于架构的默认配置。例如,如果你在ARM架构上编译内核,并运行make arm_defconfig
,它会应用适合该架构的标准配置。这是一个快速开始的方式,适用于想要一个基本可用配置的用户。
- 这个命令会创建或更新
-
make menuconfig
- 提供了一个基于文本的、可交互的菜单系统,允许用户浏览和修改内核配置选项。这个方法提供了高度的灵活性,用户可以启用或禁用特定的功能,选择文件系统支持、驱动程序等。界面友好,适合那些需要定制内核特性的用户。
-
make xconfig 或 make gconfig
- 这两个命令分别启动基于Qt(xconfig)或GTK(gconfig)的图形界面配置工具。它们提供了比
menuconfig
更现代的界面,使得配置过程更加直观。用户可以通过点击和选择来配置内核,而不需要记住各种快捷键。这适合不熟悉命令行或者偏好图形界面操作的用户。
- 这两个命令分别启动基于Qt(xconfig)或GTK(gconfig)的图形界面配置工具。它们提供了比
-
make nconfig
- 类似于
menuconfig
,但提供了一个稍微不同的、基于ncurses的、更加现代化的文本界面。它也允许用户通过菜单来配置内核,但界面布局和交互体验与menuconfig
有所不同。
- 类似于
-
make oldconfig
- 当你从旧内核升级到新内核时,这个命令非常有用。它会检查现有的
.config
文件,并针对新内核中的新选项询问用户,而保留与旧内核兼容的配置不变。这有助于保持配置的连续性,减少手动配置的工作量。
- 当你从旧内核升级到新内核时,这个命令非常有用。它会检查现有的
-
make localmodconfig
- 这个命令会分析当前正在运行的内核所加载的模块,并根据这些模块来配置内核。它仅启用那些对应于当前系统中已加载模块的配置选项,从而生成一个最小化的、针对当前系统优化的配置。这对于想要精简内核、仅包含必需功能的场景特别有用。
-
直接编辑
.config
文件- 虽然不是推荐的常规做法,但在某些情况下,直接编辑
.config
文件也是可行的。用户可以直接修改配置选项的值,然后使用make
命令进行编译。这种方法要求用户对内核配置选项有深入的理解。
- 虽然不是推荐的常规做法,但在某些情况下,直接编辑
-
make allyesconfig:
- 此命令会自动将内核配置中的所有可选功能设置为"yes"(或"y"),意味着它会生成一个尽可能包含所有特性和模块的内核配置。这对于想要构建一个包含所有可能功能的内核以进行测试或开发目的非常有用,但请注意,这通常会导致编译出的内核体积庞大,并可能不适用于生产环境,因为包含了大量可能不需要的组件。
-
make allnoconfig:
- 虽然名字可能略有误导,此命令并不会将所有配置项设为"no",而是会创建一个非常基础的配置文件,仅启用那些编译内核所必需的最基本选项。它会移除用户空间工具和许多可选的驱动程序与特性,生成一个非常精简的配置。这对于想要从头开始定制内核,或了解最小化内核配置的用户来说是一个很好的起点。
7/8两种配置方法都是自动化过程,用于快速生成极端配置的起点,之后用户通常会使用如 make menuconfig
进行进一步的手动调整,以满足特定的系统需求。
每种配置方法都有其适用场景,用户可以根据自己的需求和喜好选择最合适的方法来进行内核配置。
生成配置
make defconfig
编译内核
make bzImage -j10
制作根文件系统
BusyBox 是一个为嵌入式系统和资源有限环境设计的开源软件项目,常被称为“Linux世界的瑞士军刀”。它将众多常用的Unix工具和命令行程序整合成一个小型的单一可执行文件,大大减小了系统镜像的大小和提高了效率。由于它的紧凑性、模块化和多功能性,BusyBox非常适合用在嵌入式设备、安装盘、LiveCD、应急修复盘等场合。
以下是BusyBox的一些核心特点和功能:
- 集成化:BusyBox将超过三百个命令和工具(如ls、cp、mv、grep、find、telnet等)合并到单一的二进制文件中。每个命令作为一个模块存在,可以在编译时选择性地启用或禁用。
- 轻量化:整个BusyBox可执行文件非常小巧,通常只有几百KB至几MB大小,具体取决于启用的功能模块数量,这极大地节省了存储空间。
- 模块化和可配置:使用者可以在编译BusyBox时,通过配置脚本选择需要包含的命令和功能模块,以及裁剪掉不必要的部分,以适应特定设备的需求。
- 兼容性:尽管BusyBox的命令行工具相对于它们的GNU或BSD对应物可能功能较少,但它们大多遵循POSIX标准,确保了良好的兼容性和互换性。
- 根文件系统构建:在构建嵌入式Linux系统时,BusyBox通常是根文件系统的重要组成部分,提供必要的命令和工具以使系统可操作。
- 广泛使用:BusyBox被广泛应用于路由器、智能手机(尤其是早期的Android设备)、机顶盒、各种物联网设备以及其他嵌入式系统中。
由于其高效、灵活和节省资源的特性,BusyBox成为了嵌入式Linux开发领域不可或缺的工具之一。
下载并编译busybox
编译并安装BusyBox涉及以下几个步骤:
1. 准备工作
2. 下载BusyBox源代码
访问BusyBox的官方网站(Index of /downloads)或使用Git克隆源代码仓库:
git clone https://git.busybox.net/busybox
cd busybox
3. 配置BusyBox
使用make menuconfig
命令来配置BusyBox。这个步骤允许你选择需要包含的命令和功能模块,以及设定其他配置选项。
make defconfig
打开.config需要添加CONFIG_STATIC=y,否则启动时提示init失败,如果有其他程序编译的时候也需要使用静态链接,否则程序运行不起来
4. 编译BusyBox
接下来,编译BusyBox:
make
这将会根据你的配置编译BusyBox。
5. 安装BusyBox
为了安装编译好的BusyBox,你需要指定一个安装目录。这通常是在你的目标根文件系统中。例如,如果你想将其安装到/mnt/rootfs
目录下,可以这样做:
make install CONFIG_PREFIX=`pwd`/install
这里的CONFIG_PREFIX
指定了安装路径。确保你有足够的权限写入目标目录,并且注意这会覆盖该目录下任何同名的文件。
6. 验证安装
你可以通过进入安装目录并执行BusyBox来看看它是否工作正常:
cd `pwd`/install
./bin/busybox
这应该会显示一个帮助信息,列出了BusyBox包含的所有命令。
至此,你就完成了BusyBox的编译和安装。如果用于嵌入式系统,还需将整个根文件系统(包括BusyBox)部署到目标设备上。
7. 其他软件
如果想安装其他软件,需要使用静态链接的软件 ,这样没有依赖,我自己编译了一个简单C程序
把golang也放在bin里,都可以运行
制作rootfs
mkdir rootfs
cp -rp `pwd`/install rootfs/
cd rootfs
mkdir dev proc sys
cd ..
chmod 777 -R rootfs
- 在rootfs文件夹下创建init, 内容如下
#!/bin/sh
dmesg -n 1
mount -t devtmpfs none /dev
mount -t proc none /proc
mount -t sysfs none /sys
setsid cttyhack /bin/sh
- 打包rootfs.gz
cd rootfs
find . | cpio -R root:root -H newc -o | gzip > ../rootfs.gz
bios引导系统
使用syslinux工具引导
下载syslinux
mkdir smlinux
tar -xvf syslinux-6.03.tar.gz
cp syslinux-6.03/bios/core/isolinux.bin smlinux\
cp syslinux-6.03/bios/com32/elflink/ldlinux/ldlinux.c32 smlinux\
- 拷贝linux内核
cp linux-6.1.6\arch\x86\boot\bzImage smlinux\
- 创建isolinux.cfg文件,也放到smlinux目录下,内容如下
default bzImage initrd=rootfs.gz
- 打包ios
sudo apt-get install -y xorriso
xorriso -as mkisofs -o ../smlinux.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./
成果
make defconfig版本打包出来的iso不到12M,很小,把golang拷贝进去打包出来的也才19兆
maxlinux.iso