1 #!/bin/sh 2 3 # 注意编译的Linux内核版本, 如内核版本过低, 而工具链和主机Ubuntu过旧, 则可能会带来大量编译错误 4 5 # 1. 6 # 生成vexpress-a9开发板子的config文件, 开启参数进行编译: 7 # ARCH ?= arm 8 # CROSS_COMPILE ?= arm-linux-gnueabi- 9 # 10 cd xxx/linux-4.19.269/ 11 # 12 # 13 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_defconfig 14 15 16 # 2. 17 # 修改linux kernel的Makefile的两个变量: 18 # ARCH ?= arm 19 # CROSS_COMPILE ?= arm-linux-gnueabi- 20 # 然后, 开始编译linux kernel代码, 为了加速编译, 开启多线程编译 21 # 22 vim Makefile 23 # 24 make zImage -j4 25 make modules -j4 26 make dtbs -j4 27 28 29 # 3. 30 # 利用busybox构建最小文件系统 31 # 32 # 修改busybox的Makefile的两个变量: 33 # ARCH ?= arm 34 # CROSS_COMPILE ?= arm-linux-gnueabi- 35 # 36 cd xxx/busybox-1.35.0/ 37 # 38 # 3.1 设置 39 export ARCH=arm 40 export CROSS_COMPILE=arm-linux-gnueabi- 41 make menuconfig 42 43 # 3.2 44 Busybox Settings ---> 45 Build Options ---> 46 [*] Build BusyBox as a static binary (no shared libs) 47 48 # 3.2 开始编译: 49 # 编译完成后会在busybox目录下生成一个_install的目录, 该目录是编译好的文件系统需要使用的一些命令集合 50 make defconfig 51 make 52 make install 53 54 # 3.3 制作根文件系统 55 # 56 cd .. 57 # 58 mkdir rootfs 59 cd rootfs/ 60 # 61 cp -rf ../busybox-1.35.0/_install/* ./ 62 mkdir lib 63 cp -p /usr/arm-linux-gnueabi/lib/* ./lib 64 65 # 3.4 创建设备文件, 创建4个串口设备和控制台 66 mkdir dev 67 sudo mknod dev/tty1 c 4 1 68 sudo mknod dev/tty2 c 4 2 69 sudo mknod dev/tty3 c 4 3 70 sudo mknod dev/tty4 c 4 4 71 sudo mknod -m 666 console c 5 1 72 73 # 3.5 制作SD根文件系统镜像, 生成虚拟sd卡并格式化为ext格式 74 # 75 cd .. 76 # 64MB大小 77 dd if=/dev/zero of=rootfs.ext3 bs=1M count=64 78 mkfs.ext3 rootfs.ext3 79 80 # 3.6 将虚拟sd卡挂载到/tmpfs, 拷贝rootfs的所有文件到sd, 卸载sd(块设备不能直接读写) 81 mkdir tmpfs 82 sudo mount -t ext3 rootfs.ext3 tmpfs/ -o loop 83 sudo cp -r rootfs/* tmpfs/ 84 sudo umount tmpfs 85 86 87 # 4. 使用qemu启动内核 88 # 上级路径 89 top_path="/home/miao/AAADevelopProject/qemu_study/" 90 src_path="linux-4.19.269/arch/arm/boot/" 91 92 # 内核文件与dtb文件的路径 93 kernel_path=${top_path}${src_path}"zImage" 94 dtb_path=${top_path}${src_path}"dts/vexpress-v2p-ca9.dtb" 95 96 # 用qemu运行Linux内核, 其中: 97 # 98 # 1. -M vexpress-a9: 模拟vexpress-a9单板, 能够使用-M ?參数来获取该qemu版本号支持的全部单板 99 # 2. -m 512M: 单板执行物理内存512M 100 # 3. -kernel xxx/zImage: 告诉qemu单板执行内核镜像路径 101 # 4. -nographic: 不使用图形化界面, 仅仅使用串口 102 # 103 # 5. -append "root=/dev/mmcblk0 rw console=ttyAMA0": 104 # 内核启动參数这里告诉内核vexpress单板执行. 其中: 105 # 5.1 root=/dev/mmcblk0: 文件系统的加载Root位置 106 # 5.2 rw: 以读写的方式打开文件系统,以便能够创建, 修改, 删除文件 107 # 5.3 console=ttyAMA0: 终端 108 # 109 # 6. -sd rootfs.ext3: 从SD卡加载系统 110 # 111 qemu-system-arm \ 112 -M vexpress-a9 \ 113 -m 512m \ 114 -kernel ${kernel_path} \ 115 -dtb ${dtb_path} \ 116 -nographic \ 117 -append "root=/dev/mmcblk0 rw console=ttyAMA0" \ 118 -sd rootfs.ext3
标签:dev,内核,linux,path,qemu,arm,rootfs From: https://www.cnblogs.com/weitao-miao/p/17033624.html