04步:编译Linux内核镜像

原文:https://www.zhaixue.cc/qemu/qemu-build_kernel.html

Linux内核源码可以从官网下载(www.kernel.org),也可以从国内的镜像服务器下载,下载速度更快。
国内镜像下载地址: https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x

执行以下命令可以完全完成编译和安装工作

  1. # cd /home
  2. # sudo mkdir tftpboot
  3. # sudo chmod 777 tftpboot
  4. # cd tftpboot
  5. # mkdir kernel
  6. # cd kernel
  7. # wget https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/linux-5.10.99.tar.xz
  8. # tar -xvf linux-5.10.99.tar.xz
  9. # cd linux-5.10.99
  10. # gedit Makefile +371

修改Makefile编译,设置为arm-linux-gnueabi-gcc编译器

  1. ARCH ?= arm
  2. CROSS_COMPILE = arm-linux-gnueabi-

将编译功能配置为vexpress,在进入GUI编译模式配置编译

  1. # make vexpress_defconfig
  2. # make menuconfig

报下面这两个错误是因为flex和bison没有装,装了就好


  1. # sudo apt install flex bison

这种情况是因为libncurses-dev没装,同理

  1. # sudo apt install libncurses-dev

出现这个页面证明kernel配好了,可以安心编译了

  1. # make zImage -j 2
  2. # make modules -j 2
  3. # make dtbs -j 2
  4. # make LOADADDR=0x60003000 uImage -j 2

编译好以后,再把镜像文件和设备树文件复制到工程目录里

  1. # cp arch/arm/boot/zImage /home/tftpboot/
  2. # cp arch/arm/boot/uImage /home/tftpboot/
  3. # cp arch/arm/boot/dts/vexpress-v2p-ca9.dtb /home/tftpboot/

zImage为通用内核文件,modules是没有加载进内核的模块(驱动, make menuconfig中设置为(M)的内容), dtbs为编译的设备树,uImage是专供u-boot引导的内核,这里暂时用不上,但是我们这里先编译,可能会有以下错误:

装一个u-boot-tools即可解决

  1. # sudo apt install u-boot-tools


编译好以后,看镜像文件zImage, 设备树文件vexpress-v2p-ca9.dtb是否存在,记录下路径
在目录/home/tftpboot下创建一个脚本start.sh

  1. # cd /home/tftpboot
  2. # touch start.sh
  3. # chmod 777 start.sh
  4. # gedit start.sh

输入以下内容:

  1. qemu-system-arm \
  2. -M vexpress-a9 \
  3. -m 512M \
  4. -kernel zImage \
  5. -dtb vexpress-v2p-ca9.dtb \
  6. -nographic \
  7. -append "console=ttyAMA0"

改用root登录,su root以后./start.sh启动

有以上显示,证明内核挂载成功。最后提示end Kernel panic是因为没有根文件系统,完成下面的部分就可以解决这个问题

不用买开发板,使用QEMU就可以学习的Linux内核开发实战视频教程:《Linux内核编程》,具有一线芯片原厂开发经验的驱动工程师录制,详情点击:王利涛老师个人淘宝店:Linux内核编程
posted @ 2023-09-24 16:23  MaxBruce  阅读(314)  评论(0)    收藏  举报