构建一个U盘Linux

1.下载编译Linux内核Kernel

1.1下载内核

在Ubuntu中打开官网,下载最新版本的就可以,注意保存的位置(我在桌面新建了一个文件夹存放它)

image-20211130184020473

image-20211130185256322

1.2解压内核

在该文件夹下打开终端,输入如下命令

xz -d linux-5.15.5.tar.xz  
tar xvf linux-5.15.5.tar
1.3配置内核

(1)配置环境,安装一些可能需要的软件

apt-get update 
apt-get upgrade
apt-get install build-essential
apt-get install build-essential gcc
apt-get install binutils-multiarch
apt-get install alien
apt-get install ncurses-dev
apt-get install libncurses5-dev libncursesw5-dev
apt-get install ncurses-devel
apt-get install bison -y
apt-get install flex

(2)配置内核

在解压后的linux内核文件夹里打开终端输入如下命令(出现如图所示时表示操作成功)

make x86_64_defconfig

image-20211130185817395

在命令行输入

make menuconfig

会出现如下界面

image-20211130190334569

然后添加一些选项

·Device Drivers -> Block devices ->loopback device support, RAMblock device support

image-20211130191213162

·Device Drivers ->SCSI Support -> SCSI device support 下的SCSI disk Support、 SCSI low-level drivers —> Buslogic SCSI support

image-20211130191038232

· Device Drivers ->USB Support ->Support for Host-side USB,Preliminary USB device filesystem ,USB Mass Storage support,xHCI HCD (USB 3.0) support,xHCI HCD (USB 2.0) support

image-20211130191429638

File System -> ext3

image-20211130191553034

配置好后保存退出

1.4编译内核
make dep // 寻找依存关系,由系统决定要编译哪些内容
make clean // 清除以前编译内核时生成的中间文件
make bzImage  // 生成压缩的Linux内核文件,保存位置:你内核编译完成后 最后一行命令就是其位置

在编译的时候可能会出现一些问题,这些是我遇到的,仅供参考:编译Linux内核kernel时遇到的问题与解决方案_一顿吃不饱的博客-CSDN博客

2.下载安装BusyBox工具

2.1下载压缩包

官网:BusyBox

image-20211130103725726

选择最新版本下载

2.2解压
  • 解压缩,可以右击解压也可以使用命令行解压
tar -jxvf busybox-1.34.1.tar.bz2 

image-20211130104302351

2.3配置BusyBox

进入解压后的目录

make defconfig  //使用默认配置,让busybox包含常用命令和工具
make menuconfig  //在上述基础上,自己更改配置

开始配置

image-20211130104751519

添加项
BusyBox Setting->Build Options->[ 选]Build Busybox as a static binary (no shared libs)
Shells->chose your default shell(ash):
BusyBox Setting->[*]Don’t use /usr(否则busybox会安装到ubuntu的/usr下,会覆盖原系统原有的命令)

删除项
Coreutils—>sync
Linux System Utilities—>nsenter
Linux System Utilities—>Support mounting NFS filesystems(网络文件系统)
Networking Utilities—>inetd(超级服务器)
busybox settings ->build options ->build with large file support
2.4编译和安装busybox
make
make install

当出现下图所示时就表明已经安装完成了

image-20211130111146587

执行完成后会发现多了一个_install目录

(如果在make或make install 过程中一直出现问题且无法解决,就换一个busybox版本再尝试一下)

3.格式化U盘

3.1下载安装DiskGenius

地址:压缩包上传审核未通过,需要请私信

image-20211130180214777

解压后点击.exe文件就可以运行了

image-20211130180559232

3.2格式化U盘

需要清空U盘所有信息,请做好备份

将U盘转化为MBR格式

image-20211130192706383

分区->删除当前分区(清空磁盘)

分区->建立新分区->主磁盘分区->选择文件系统类型 ext3

image-20211130192826977

成功后如图所示

image-20211130181316879

4.构建Linux根文件系统

4.1虚拟机内的操作

在虚拟机中构建一个根文件系统的镜像压缩,之后复制到U盘中。如果直接在U盘中构建,之后有什么错误需要格式化U盘。

(1)在文章开头时新建的文件夹下新建rootfs文件,把_install目录中的内容复制进去,现在rootfs下已经有了bin、sbin目录

(2)一个完整linux系统还需要添加其他必要文件夹,进入/rootfs,输入:

`mkdir usr proc mnt var tmp dev sys etc`

image-20211130193152175

(3)同时在rootfs下还必须要有一个init文件,这个init文件可以是一个可执行的二进制文件,也可以是一个shell脚本,或者是指向前面两者的链接。init文件会在linux内核初始化就绪后被执行。方便起见,我们就把init做成一个指向bin/sh的软连接,在rootfs下输入:

ln -s bin/sh init

(4)dev目录下还必须有几个必要的设备console,null,ram,tty,tty1,tty2,tty3,tty4这些tty就是和用户交互的终端:cd 进入/rootfs/dev,建立必须的设备节点文件,并授权,输入:

mknod tty c 5 0
mknod console c 5 1
mknod null c 1 3
mknod ram b 1 0
mknod tty1 c 4 1
mknod tty2 c 4 2
mknod tty3 c 4 3   
mknod tty4 c 4 4  
chmod 666 tty console null
chmod 666 tty1 tty2 tty3 tty4  
chmod 600 ram

(5)制作压缩镜像,输入:

cd .. // 回到rootfs目录下
find . | cpio -H newc -o > ../rootfs.img // 返回 块数目:5157 块
cd .. //回到用户目录
gzip rootfs.img -f //压缩镜像
4.2 U盘内的操作

(1)将U盘连接到虚拟机

若U盘连接不到虚拟机,请参考:U盘连接不到虚拟机的问题解决方法_一顿吃不饱的博客-CSDN博客

image-20211130194227700

(2)检查是否分区成功和连接成功,输入:

sudo fdisk -l

image-20211130194537039

(3)挂载U盘

mkdir /mnt/usb2 //新建一个usb2文件夹 
mount /dev/sdb1 /mnt/usb2 //然后把sdb1挂到usb2文件夹

(4)安装grub,显示最后一句话说明安装成功。

输入:

sudo grub-install --root-directory=/mnt/usb2 /dev/sdb

image-20211201145136936

这条命令会把grub安装到/dev/sdb中,即把grub的第一阶段(短于512字节的部分)放入/dev/sdb的第一扇区,并且把第二阶段要用到的各种文件放到当前目录(即/dev/sdb1分区承载的ext3文件系统)(更准确的说,是放在了/dev/sdb1/boot/grub下)

(5)把过去做好的bzImage和rootfs.img.gz复制到U盘的boot目录下

cp linux-5.15.5/arch/x86/boot/bzImage /mnt/usb2/boot/
cp rootfs.img.gz /mnt/usb2/boot/

image-20211130195227504

image-20211130195350065

(6)配置grub.cfg

​ 在/mnt/usb2/boot/grub文件夹新建一个文件grub.cfg并在文件夹内编写以下内容,保存后退出

image-20211130195708978

image-20211130195630489

(7)卸载U盘,目的是避免损坏或丢失数据,之后拔出U盘,即制作完成

image-20211130195925427

5.测试U盘Linux

5.1配置虚拟机

此时以管理员的方式运行VM,并将U盘连接到主机

(1)在VMware内新建一个虚拟机,不要安装操作系统

image-20211130200128631

选择Ubuntu64位

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gsWNnUoT-1638275082031)(C:\Users\MayBeBa\AppData\Roaming\Typora\typora-user-images\image-20211130200221486.png)]

选择磁盘类型

image-20211130200332620

选择物理磁盘

image-20211130200509637

选择设备,drive0是主机的物理盘,不要选,一般都是drive1或drive2

image-20211130200556130

完成虚拟机的创建

(2)配置虚拟机,使得开机就进入BIOS系统

image-20211130200836521

5.2开启虚拟机,进行测试

(1)设置虚拟机bios 的引导顺序,将U盘放在第一位(shift+"+/-")

image-20211130201217142

image-20211130201254851

​ 保存退出

(2)成功启动,大功告成

image-20211130201431521

Enter ->等待系统启动

image-20211130201810013

(3)测试U盘Linux系统

image-20211130201937286

image-20211130202016393

image-20211130202156790

成功运行,至此我们的U盘Linux就成功部署完成了

Logo

更多推荐