1、下载Linux内核

除了以下两种正统方法,还可以到我的云盘下载。<链接>

方法一:

在终端使用git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/进行自动下载。

下载的速度如果慢的无法忍受的话,建议使用第二种官网下载

方法二:

官网<链接>

ubuntu22 qemu编译安装_开发板

下载LTS的4.4.×版本。

2、下载完毕后,将其拖曳到Ubuntu中,输入tar xvf linux-4.4.195.tar.xz解压缩.

ubuntu22 qemu编译安装_git_02

3、进入到解压后的文件夹,然后输入vi Makefile

ubuntu22 qemu编译安装_开发板_03


在vi的一般模式下,输入/CROSS_COMPILE,进行搜索CROSS_COMPILE。**修改ARCHCROSS_COMPILE的值,如下图所示。

ubuntu22 qemu编译安装_ubuntu22 qemu编译安装_04

针对我的linux-4.4.195版本的是在257行~258行

ARCH            ?= arm
CROSS_COMPILE   ?= arm-linux-gnueabi-

4、修改配置文件

在正式修改配置文件之前,先看一下我们的仿真开发板所在位置。

①、输入cd ./arch可以看到QEMU支持的多种架构CPU,其中我们要关注是ARM

ubuntu22 qemu编译安装_git_05

②、输入cd ./arm可以看到ARM支持的开发板

ubuntu22 qemu编译安装_linux_06


其中有我们本次要使用的

vexpress

开发板,当然还包括了其他好多,比如

三星的S3C2440

等!

下面让我们来查看仿真开发板的配置文件所在目录及具体内容

①、输入cd ./configs

ubuntu22 qemu编译安装_开发板_07

②、输入vi vexpress_defconfig

针对不同的开发板,Linux内核都有一个不同的配置文件

进入可详细查看,针对vexpress的内核配置。

其中...=y中的y表示编译器内核,即静态编译。而相对的y表示动态编译。

接下来便是正式配置环节

①、退回到内核的根目录,即./linux-4.4.195目录下!

输入make vexpress_defconfig

ubuntu22 qemu编译安装_开发板_08

输入ll可查看刚刚生成的.config文件

ubuntu22 qemu编译安装_开发板_09

②、输入make zImage -j6,进行编译内核。【且同时开启了6个线程】

(时间蛮长的…)

ubuntu22 qemu编译安装_git_10

编译完成后…

ubuntu22 qemu编译安装_ubuntu22 qemu编译安装_11

编译生成的内核为ach/arm/boot中的zImage。【zImage和平台无关】

③、输入make modules -j4,进行编译内核模块

ubuntu22 qemu编译安装_ubuntu22 qemu编译安装_12

④、输入make dtbs,进行编译dtbs文件

dtbs和具体开发板有关

ubuntu22 qemu编译安装_linux_13

⑤、输入qemu-system-arm -M vexpress-a9 -m 512M -kernel arch/arm/boot/zImage -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "console=ttyAMA0",用以验证内核是否编译成功。

ubuntu22 qemu编译安装_linux_14


最后还是跟之前一样,我们还有挂载文件系统而已,稍后便可解决!


这里再学习两个技巧:

技巧一:

最后的这个进程无法用普通的ctrl + C的方法关闭,可以采用下面方法。
①、新打开一个终端,输入ps -a,查看对应的PID号

ubuntu22 qemu编译安装_git_15


②、输入

kill 121088

技巧二:

发现最后一个执行的内容挺长的,这里我们可以制造一个脚本,通过运行脚本的方式,直接编译!
①、在内核./QEMU根目录下,输入touch boot.sh
②、为这个脚本的所有执行用户赋予可执行的权限,输入chmod a+x boot.sh ③、通过输入vi boot.sh,将上述长命令拷贝进来!【太长的话可以换行,行间需要加入\】【如下代码】
④、输入./boot.sh即可执行该脚本
【注意,目录要变得话,里面的路径也需要变。也就是说该脚本只能固定存放在某个目录下!(以上所述例子是在./QEMU目录下!)】

qemu-system-arm \
        -M vexpress-a9 \
        -m 512M \
        -kernel linux-4.4.195/arch/arm/boot/zImage \
        -dtb linux-4.4.195/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \
        -nographic \
        -append "console=ttyAMA0"

脚本换行,有一个需要注意的问题,必须让后面的换行符高亮,如果呈现白色说明,上下两行之间空格太多,应重新回车换行!

ubuntu22 qemu编译安装_git_16