前言:最近学习arm,想要编译一个Linux,记录编译的过程
- 环境:
OS:WSL2(Linux:5.15.133.1-1)(同样适用于Ubuntu系统)
1.gcc-aarch64-linux-gnu
2.Linux Kernel: linux-6.1.92
3.busybox: busybox-1.36.1
4.qemu
一.下载配置Linux
Linux内核官网:https://www.kernel.org/
linux-6.1.92:
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.1.92.tar.xz
安装必要文件:
sudo apt-get install gcc-aarch64-linux-gnu
sudo apt-get install libncurses5-dev build-essential git bison flex libssl-dev
设置CPU架构
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
设置系统选项
make defconfig
make menuconfig
在此设置一下内容
- 添加hotplug支持:
Device Drivers -> Generic Driver Options -> Support for uevent helper (/sbin/hotplug) path to uevent helper
- 添加initramfs的支持:
General setup ---> [*]Initial RAM filesystem and RAM disk(initramfs/initrd) support(rootfs) Initramfs souce file(s)
- 内核页分别配置为 :
Kernel Features ---> Page size(4KB) ---> Virtual address space size(48-bit)--->
至此配置工作结束
二.下载和编译busybox
busybox官网:https://busybox.net
busybox-1.36.1 :
wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2
解压:
tar jxvf busybox-1.36.1.tar.bz2
设置CPU架构
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
设置系统选项
make defconfig
make menuconfig
在这里设置一下内容:
Settings --->
--- Build Options
[*] Build static binary (no shared libs)
编译:
make -j16
安装:
make install
默认路径为当期目录的_install文件夹,至此busybox静态编译完成
三.制作根文件系统rootfs
-
创建根目录所需的目录
cd busybox-1.36.1/_install
mkdir -p dev etc home lib mnt proc root sys tmp var
根文件系统目录说明:
- /bin: 系统管理员和用户均可使用的命令
- /sbin: 系统管理员使用的系统命令
- /dev: 存储特殊文件或设备文件;设备两种类型:字符设备、块设备
- /etc: 系统配置文件
- /home: 普通用户目录
- /root:root用户目录
- /lib: 为系统启动或根文件上的应用程序(/bin,/sbin等)提供共享库,以及为内核提供内核模块
- /mnt:临时挂载点
- /tmp: 临时文件存储目录
- /usr:usr hierarchy,全局共享的只读数据路径
- /var:存储常发生变化的数据目录:cache、log等
- /proc: 基于内存的虚拟文件系统,用于为内核及进程存储其相关信息
- /sys:sysfs虚拟文件系统提供了一种比proc更为理想的访问内核数据的途径:其主要作用在于为管理linux设备提供一种统一模型的接口
- 创建根目录所需的必要文件
cd busybox-1.36.1/_install/etc vim profile vim inittab chmod 755 inittab mkdir -p init.d/ vim init.d/rcS chmod 755 init.d/rcS vim fstab
inittab:
::sysinit:/etc/init.d/rcS ::respawn:-/bin/sh ::askfirst:-/bin/sh ::ctrlaltdel:/bin/umount -a -r
rcS:
/bin/mount -a mkdir -p /dev/pts mount -t devpts devpts /dev/pts echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s echo "Kernel Versio