1、下载Linux内核
除了以下两种正统方法,还可以到我的云盘下载。<链接>
方法一:
在终端使用git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/
进行自动下载。
下载的速度如果慢的无法忍受的话,建议使用第二种官网下载
方法二:
官网<链接>
下载LTS的4.4.×
版本。
2、下载完毕后,将其拖曳到Ubuntu中,输入tar xvf linux-4.4.195.tar.xz
解压缩.
3、进入到解压后的文件夹,然后输入vi Makefile
在vi的一般模式下,输入/CROSS_COMPILE
,进行搜索CROSS_COMPILE。**修改ARCH
和CROSS_COMPILE
的值,如下图所示。
针对我的linux-4.4.195版本的是在257行~258行
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-gnueabi-
4、修改配置文件
在正式修改配置文件之前,先看一下我们的仿真开发板所在位置。
①、输入
cd ./arch
可以看到QEMU支持的多种架构CPU,其中我们要关注是ARM②、输入
cd ./arm
可以看到ARM支持的开发板其中有我们本次要使用的
vexpress
开发板,当然还包括了其他好多,比如
三星的S3C2440
等!
下面让我们来查看仿真开发板的配置文件所在目录及具体内容
①、输入cd ./configs
②、输入
vi vexpress_defconfig
针对不同的开发板,Linux内核都有一个不同的配置文件
进入可详细查看,针对
vexpress
的内核配置。其中
...=y
中的y表示编译器内核,即静态编译。而相对的y
表示动态编译。
接下来便是正式配置环节
①、退回到内核的根目录,即./linux-4.4.195
目录下!
输入make vexpress_defconfig
输入ll
可查看刚刚生成的.config
文件
②、输入make zImage -j6
,进行编译内核。【且同时开启了6个线程】
(时间蛮长的…)
编译完成后…
编译生成的内核为ach/arm/boot
中的zImage。【zImage和平台无关】
③、输入make modules -j4
,进行编译内核模块
④、输入make dtbs
,进行编译dtbs文件
dtbs和具体开发板有关
⑤、输入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"
,用以验证内核是否编译成功。
最后还是跟之前一样,我们还有挂载文件系统而已,稍后便可解决!
这里再学习两个技巧:
技巧一:
最后的这个进程无法用普通的ctrl + C
的方法关闭,可以采用下面方法。①、新打开一个终端,输入ps -a
,查看对应的PID号②、输入
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"
脚本换行,有一个需要注意的问题,必须让后面的换行符高亮,如果呈现白色说明,上下两行之间空格太多,应重新回车换行!