更新 my-linux.md

给部分代码框添加shell标记
This commit is contained in:
mckero authored and GitHub committed 2025-09-25 17:46:46 +08:00
1 parent 20fe6e7d9b
commit 5569d011ac
1 file changed
+48 -48
+48 -48
View File
@@ -28,31 +28,31 @@ lang: zh_CN
把压缩包wget下来(用curl也行) 把压缩包wget下来(用curl也行)
``` ```shell
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.16.4.tar.xz wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.16.4.tar.xz
``` ```
#### 解压 #### 解压
把下载下来的压缩包进行解压 把下载下来的压缩包进行解压
``` ```shell
tar -xf inux-6.16.4.tar.xz tar -xf inux-6.16.4.tar.xz
``` ```
#### 配置内核 #### 配置内核
先cd到对应目录 先cd到对应目录
``` ```shell
cd inux-6.16.4 cd inux-6.16.4
``` ```
我就直接使用默认配置了。如果需要可以调整配置。 我就直接使用默认配置了。如果需要可以调整配置。
``` ```shell
make defconfig make defconfig
``` ```
使用编译命令。(-j是要使用多少个核心) 使用编译命令。(-j是要使用多少个核心)
``` ```shell
make -j4 make -j4
``` ```
等待编译完成后会提示内核的输出路径,我编译的是x86的。 等待编译完成后会提示内核的输出路径,我编译的是x86的。
``` ```shell
linux-6.16.4/arch/x86/boot/bzImage linux-6.16.4/arch/x86/boot/bzImage
``` ```
@@ -66,19 +66,19 @@ linux-6.16.4/arch/x86/boot/bzImage
选择Download Source接着,滑到最底下找到1.37.0版本(大约2mb左右,那些大小太少的好像是用来校验的,你要是想也可以全下载下来一个一个找😆) 选择Download Source接着,滑到最底下找到1.37.0版本(大约2mb左右,那些大小太少的好像是用来校验的,你要是想也可以全下载下来一个一个找😆)
![busybox-download](https://cdn.jsdelivr.net/gh/MCKero6423/picx-images-hosting@master/busybox-download.mf9b4p68.webp) ![busybox-download](https://cdn.jsdelivr.net/gh/MCKero6423/picx-images-hosting@master/busybox-download.mf9b4p68.webp)
``` ```shell
wget https://busybox.net/downloads/busybox-1.37.0.tar.bz2 wget https://busybox.net/downloads/busybox-1.37.0.tar.bz2
``` ```
#### 解压busybox #### 解压busybox
还是老生常谈的解压 还是老生常谈的解压
``` ```shell
tar -xf busybox-1.37.0.tar.bz2 tar -xf busybox-1.37.0.tar.bz2
``` ```
#### 配置busybox #### 配置busybox
解压完后cd进对应目录,配置busybox,由于我们这个系统简直就是一个毛坯房,几乎啥都没有,所以说要用静态编译。先去配置一下。 解压完后cd进对应目录,配置busybox,由于我们这个系统简直就是一个毛坯房,几乎啥都没有,所以说要用静态编译。先去配置一下。
``` ```shell
make menuconfig make menuconfig
``` ```
进到settings(按enter)找到Build Busybox as a static binary(no shared libs)按空格选择,按→选Exit 进到settings(按enter)找到Build Busybox as a static binary(no shared libs)按空格选择,按→选Exit
@@ -87,25 +87,25 @@ make menuconfig
#### 编译busybox #### 编译busybox
配置完后就开始编译 配置完后就开始编译
``` ```shell
make -j 2 make -j 2
``` ```
编译完成后,在你的工作目录创建一个临时目录 编译完成后,在你的工作目录创建一个临时目录
``` ```shell
mkdir busybox mkdir busybox
``` ```
然后 然后
``` ```shell
make install CONFIG_PREFIX=../busybox make install CONFIG_PREFIX=../busybox
``` ```shell
#### 编辑img文件 #### 编辑img文件
使用dd命令创建一个全都是0的文件 使用dd命令创建一个全都是0的文件
``` ```shell
dd if=/dev/zero of=Linux.img bs=1M count=512) dd if=/dev/zero of=Linux.img bs=1M count=512)
``` ```shell
给img文件分区 给img文件分区
``` ```shell
gdisk Linux.img gdisk Linux.img
``` ```
输入n,后面两个按空格,最后一个输入50MB,guid填写EF00(注意大小写) 输入n,后面两个按空格,最后一个输入50MB,guid填写EF00(注意大小写)
@@ -115,82 +115,82 @@ gdisk Linux.img
#### 挂载 #### 挂载
先使用losetup将一个文件或设备与一个回环设备(loop device)进行关联。 先使用losetup将一个文件或设备与一个回环设备(loop device)进行关联。
``` ```shell
sudo losetup -f -P Linux.img sudo losetup -f -P Linux.img
``` ```
lsblk查看 lsblk查看
``` ```shell
lsblk lsblk
``` ```
找到Linux的loop,我这边是loop0里面有loop0p1,loop0p1。 找到Linux的loop,我这边是loop0里面有loop0p1,loop0p1。
loop0p1 loop0p1
``` ```shell
sudo mkfs.fat -F32 /dev/loop0p1 sudo mkfs.fat -F32 /dev/loop0p1
``` ```
loop0p2 loop0p2
``` ```shell
sudo mkfs.exit4 /dev/loop0p2 sudo mkfs.exit4 /dev/loop0p2
``` ```
在工作目录创建一个mnt文件夹 在工作目录创建一个mnt文件夹
``` ```shell
mkdir mnt mkdir mnt
``` ```
挂载loop0p1 挂载loop0p1
``` ```shell
sudo mount /dev/loop0p1 mnt sudo mount /dev/loop0p1 mnt
``` ```
#### 创建 EFI #### 创建 EFI
``` ```shell
sudo grub-install --target=x86_64-efi --efi-directory=$(realpath mnt) --bootloader-id=GRUB --removable --recheck sudo grub-install --target=x86_64-efi --efi-directory=$(realpath mnt) --bootloader-id=GRUB --removable --recheck
``` ```
查看mnt里面的文件,应该会有一个叫做EFI的文件夹 查看mnt里面的文件,应该会有一个叫做EFI的文件夹
``` ```shell
ls mnt ls mnt
``` ```
创建一个在mnt/BOOT/grub的文件夹 创建一个在mnt/BOOT/grub的文件夹
``` ```shell
mkdir -p mnt/boot/grub mkdir -p mnt/boot/grub
``` ```
复制文件 复制文件
``` ```shell
cp mnt/BOOT/grub.cfg /mnt/boot/grub cp mnt/BOOT/grub.cfg /mnt/boot/grub
``` ```
查看loop0p2的id 查看loop0p2的id
``` ```shell
blkid /dev/loop0p2 blkid /dev/loop0p2
``` ```
把UUID物复制下来,替换mnt/boot/grub/grub.cfg中的UUID,然后把修改后的文件直接复制替换到mnt/EFI/BOOT/grub.cfg 把UUID物复制下来,替换mnt/boot/grub/grub.cfg中的UUID,然后把修改后的文件直接复制替换到mnt/EFI/BOOT/grub.cfg
回到mnt的上一层,解除挂载。 回到mnt的上一层,解除挂载。
``` ```shell
sudo umount mnt sudo umount mnt
``` ```
#### 给系统搞个根目录 #### 给系统搞个根目录
先挂载 loop0p2 先挂载 loop0p2
``` ```shell
sudo mount /dev/loop0p2 mnt sudo mount /dev/loop0p2 mnt
``` ```
复制内核文件到mnt 复制内核文件到mnt
``` ```shell
sudo cp linux-6.16.4/arch/x86/boot/bzImage mnt sudo cp linux-6.16.4/arch/x86/boot/bzImage mnt
``` ```
把busybox编译出来的二进制文件移到对应目录 把busybox编译出来的二进制文件移到对应目录
``` ```shell
sudo cp -r busybox/* mnt sudo cp -r busybox/* mnt
``` ```
cd到mnt cd到mnt
``` ``` shell
cd mnt cd mnt
``` ```
创建boot文件夹 创建boot文件夹
``` ```shell
mkdir boot mkdir boot
``` ```
创建其他需要的目录(有些文件创建来就是空着的,方便后期不用创建,比如说包管理器就要用etc文件夹 创建其他需要的目录(有些文件创建来就是空着的,方便后期不用创建,比如说包管理器就要用etc文件夹
``` ```shell
mkdir proc mkdir proc
mkdir sys mkdir sys
@@ -198,33 +198,33 @@ mkdir sys
mkdir etc mkdir etc
``` ```
把bzImage文件移动到boot文件夹 把bzImage文件移动到boot文件夹
``` ```shell
sudo mv bzImage boot/ sudo mv bzImage boot/
``` ```
跳转boot目录,ls检查一下 跳转boot目录,ls检查一下
``` ```shell
cd boot cd boot
ls ls
``` ```
如果没有问题就能看到bzImage文件 如果没有问题就能看到bzImage文件
``` ```shell
bzImage bzImage
``` ```
创建grub文件夹 创建grub文件夹
``` ```shell
mkdir grub mkdir grub
``` ```
cd到grub cd到grub
``` ```shell
cd grub cd grub
``` ```
创建一个文件叫grub.cfg 创建一个文件叫grub.cfg
``` ```shell
vim grub.cfg vim grub.cfg
``` ```
里面的内容按这个填 里面的内容按这个填
``` ```shell
menuentry "Unics_MCKero" { menuentry "Unics_MCKero" {
insmod part_gpt insmod part_gpt
insmod fat insmod fat
@@ -237,7 +237,7 @@ menuentry "Unics_MCKero" {
Unics_MCKero这个是你的引导程序的名字可以修改(尽量使用英文,我不知道用特殊字符或者中文会不会不兼容) Unics_MCKero这个是你的引导程序的名字可以修改(尽量使用英文,我不知道用特殊字符或者中文会不会不兼容)
执行这个查看loop0p2的UUID 执行这个查看loop0p2的UUID
``` ```shell
blkid /dev/loop0p2 blkid /dev/loop0p2
``` ```
mnt/boot/grub.cfg里面的set=root 这个后面填写loop0p2的UUID mnt/boot/grub.cfg里面的set=root 这个后面填写loop0p2的UUID
@@ -245,15 +245,15 @@ mnt/boot/grub.cfg里面的set=root 这个后面填写loop0p2的UUID
PARTUUID这里填写blkid /dev/loop0p2输出的PARTUUID,然后保存 PARTUUID这里填写blkid /dev/loop0p2输出的PARTUUID,然后保存
跳转到mnt的boot目录(因为我在mnt的boot/grub目录所以说我就直接使用直接返回上一层) 跳转到mnt的boot目录(因为我在mnt的boot/grub目录所以说我就直接使用直接返回上一层)
``` ```shell
cd .. cd ..
``` ```
创建一个名为init的文件 创建一个名为init的文件
``` ```shell
vim init vim init
``` ```
内容就写这个 内容就写这个
``` ```shell
#!/bin/sh #!/bin/sh
mount -t sysfs none /sys mount -t sysfs none /sys
@@ -263,7 +263,7 @@ mount -t devtmpfs devtmpfs /dev
exec /bin/sh exec /bin/sh
``` ```
给init执行权限(一定要给,如果没给系统运行不了) 给init执行权限(一定要给,如果没给系统运行不了)
``` ```shell
chmod +x init chmod +x init
``` ```
#### 网络 #### 网络
@@ -272,11 +272,11 @@ chmod +x init
先到这个项目的仓库[ifupdown-ng的github仓库](https://github.com/ifupdown-ng/ifupdown-ng)这是一个用c语言编写的项目,比较轻量,它可以用来管理网络设备。 先到这个项目的仓库[ifupdown-ng的github仓库](https://github.com/ifupdown-ng/ifupdown-ng)这是一个用c语言编写的项目,比较轻量,它可以用来管理网络设备。
我们先把他的仓库克隆下来 我们先把他的仓库克隆下来
``` ```shell
git clone https://github.com/ifupdown-ng/ifupdown-ng.git git clone https://github.com/ifupdown-ng/ifupdown-ng.git
``` ```
跳转进仓库 跳转进仓库
``` ```shell
cd ifupdown-ng cd ifupdown-ng
``` ```
因为我们的小系统没有依赖库,所以说我们需要静态编译这个程序。 因为我们的小系统没有依赖库,所以说我们需要静态编译这个程序。