linux 内核学习3-自己编译一个ARM Linux内核

linux 内核学习3-自己编译一个ARM Linux内核

1. 目的

编译一个ARM版本的内核镜像,谁让我是做Android的呢!并且在QEMU上运行。

2. 准备工作

2.1 开发环境

  1. ubuntu 18.4虚拟机
  2. linux内核版本 4.19.67 linux内核地址
  3. busybox 工具包

3.编译过程

3. busybox编译

$ cd busybox
$ export ARCH=arm
$ export CROSS_COMPILE=arm-linux-gnueabi-
$ make menuconfig

进入menuconfig之后,配置成静态编译

Busybox Settings  ---->
	Build Options     ---->
			[*] Build BusyBox as a static binary  (no shared libs)
# make && make install

3.2创建必须的文件

这个时候在busybox根目录下回有一个_install目录,该目录存放了编译好的文件系统需要的一些命令合计
将_install 目录复制到linux-4.0 目录下。进入_install 目录,先创建etc、dev等目录。

# mkdir etc
# mkdir dev
# mkdir mnt
# mkdir -p etc/init.d/

在_install /etc/init.d/目录下新建一个rcS文件,并写入如下内容

mkdir -p /sys
mkdir -p /tmp
mkdir -p /proc
mkdir -p /mnt
/bin/mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

修改_install/etc/init.d/rcS 文件需要可执行权限,可以使用chmod命令来实现,比如chmod +x_install/etc/init.d/rcS
在_install /etc 目录中新建一个fstab文件,并写入如下内容。

proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
debugfs /sys/kernel/debug debugfs defaults 0 0

linux 内核学习3-自己编译一个ARM Linux内核_第1张图片

在_install /etc 目录中新建一个inittab文件,并写入如下内容

::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r

_install/dev 目录中创建如下设备结点,这时需要root权限。

cd _install/dev/
sudo mknod console c 5 1
sudo mknod null c 1 3

linux 内核学习3-自己编译一个ARM Linux内核_第2张图片

3.3. 编译内核配置

$ cd linux-4.0
$ export ARCH=arm
$ export CROSS_COMPILE=arm-linux-gnueabi-
$ make vexpress_defconfig
$ make menuconfig
  1. 配置 initramfs,在 initramfs source file 中填入_install ,并把Default kernel command string清空

接着

 General setup  --->  
		  [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support 
        		 (_install) Initramfs source file(s)  

Boot options --->
	()Default kernel command string

Kernel Features --->
	Memory split(3G/1G user/kernel split)--->
	[*] High Memory Support

注意,(_install) Initramfs source file(s)这个要通过enter键进入,输入_install

3.4 开始编译内核

$ make bzImage -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
$ make dtbs

3.5 运行QEMU虚拟机

 qemu-system-arm -M vexpress-a9 -smp 4 -m 200M -kernel arch/arm/boot/zImage -append "rdinit=/linuxrc console=ttyAMA0 loglevel=8" -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic

4.其他

这里的操作流程参考的是奔跑吧linux内核入门篇。大家想学习linux内核,可以去买奔跑吧linux内核 入门篇和奔跑吧linux内核。
这里给到作者笨叔叔的学习资料 github地址 这里有笨叔叔调教好的linux内核。这来有他的视频教程 视频地址 内核地址

你可能感兴趣的:(linux)