2023年7月6日发(作者:)
Qemu模拟ARM开发板仿真Linux环境:ubuntu16.04⽬标:在ubuntu 上编译linux内核 并在qemu模拟的ARM开发板上运⾏背景知识:1.什么是ARMARM是⼀款微处理器的简称,从早期的ARM1系列发展到ARM11,ARM11以后的产品⽤Coretex命名。2.宿主机(Host)与⽬标机(Target)开发板由于硬件所限不能直接在本地建⽴起开发环境,需要在配置⾼的PC上开发完软件后再移植到开发板上运⾏。在这⾥,个⼈电脑就是Host,开发板就是Target.3.交叉编译交叉编译就是在⼀个平台上⽣成另⼀个平台的可执⾏代码。由于宿主机和⽬标机的平台不⼀样(平台包括体系结构,最直观的就是CPU不⼀样,⼀个是X86,⼀个是ARM,使⽤的汇编语⾔都不⼀样),不能使⽤宿主机的编译⼯具,⽽需要在宿主机安装⽬标机的编译⼯具链,来编译得到能够在⽬标机运⾏的可执⾏代码。不同的CPU开发板、不同的Linux内核版本所使⽤的交叉编译⼯具都不⼀样。4.⽂件系统即⽂件的组织⽅式,不同的操作系统有不同的⽂件系统,linux的⽂件组织为⼀颗⽬录树,根为/5.挂载⽂件系统将⼀个⽂件系统的顶层⽬录挂到另⼀个⽂件系统的⼦⽬录上,使它们成为⼀个整体,称为挂载。把该⼦⽬录称为挂载点。步骤:1.下载Linux4.4.1内核代码,并解压2.安装交叉编译⼯具sudo apt-get install gcc-arm-linux-gnueabi3.编译Linux内核进⼊解压后的⽂件夹,执⾏以下指令进⾏编译#在shell执⾏可执⾏⽂件时,export⽤于新增、删除、修改环境变量,供后续程序使⽤,export仅在该次登录操作有效#ARCH 和 CROSS_COMPILE是makefile⽂件中预留的参数 需要给出# CROSS_COMPILE指定了所使⽤的交叉编译⼯具 ARCH指定了⽬标处理器的架构 这⾥使⽤arm处理器export ARCH=armexport CROSS_COMPILE=arm-linux-gnueabi-
#添加完环境变量后开始编译(源码中已经写好了makefile⽂件)make后⾯的参数是⽬标名 从⽽不会执⾏整个配置⽂件 ⽽是指定部分make vexpress_defconfig make zImage -j8
make modules -j8
make dtbs
编译完成 将⽣成的zImagle(内核镜像)和dtbs⽂件复制⼀份到⼀个单独的⽂件夹中mkdir extra_folder
cp arch/arm/boot/zImage extra_folder/
cp arch/arm/boot/dts/* extra_folder/
cp .config extra_folder/4.安装qemu模拟器sudo apt-get install qemu5.制作根⽂件系统根⽂件系统由基本的运⾏命令、库和字符设备构成。基本的运⾏命令需要使⽤Busybox,这个库也需要进⾏交叉编译,因此可以运⾏下⾯的指令进⾏源代码下载。wget
解压源码 在源码⽬录下编译源码make defconfig
make CROSS_COMPILE=arm-linux-gnueabi-
make install CROSS_COMPILE=arm-linux-gnueabi- 编译完成后,在该⽬录下⽣成的_install⽂件夹便是基本的运⾏命令创建根⽬录 rootfs 以及基本⽬录结构 -p表⽰当⽗⽬录不存在时,创建⽗⽬录sudo mkdir rootfssudo mkdir rootfs/lib/sudo mkdir -p rootfs/proc/sudo mkdir -p rootfs/sys/sudo mkdir -p rootfs/tmp/sudo
mkdir -p rootfs/root/sudo mkdir -p rootfs/var/sudo mkdir -p rootfs/mnt/sudo mkdir -p rootfs/dev/#etc为启动时的配置⽂件
#下载⽅式1:#下载⽅式2:sudo cp etc rootfs/ -arf#从交叉编译⼯具中拷贝运⾏库到sudo cp -arf /usr/arm-linux-gnueabi/lib/* rootfs/lib/sudo rm rootfs/lib/*.asudo arm-linux-gnueabi-strip rootfs/lib/*#创建tty终端设备sudo mknod rootfs/dev/tty1 c 4 1sudo mknod rootfs/dev/tty2 c 4 2sudo mknod
rootfs/dev/tty3 c 4 3sudo mknod rootfs/dev/tty4 c 4 4sudo mknod rootfs/dev/console
c 5 1sudo mknod rootfs/dev/null c 1 3⽣成镜像dd if=/dev/zero of=3 bs=1M count=32格式化⽣成ext3⽂件系统3 3将⽂件拷贝到镜像sudo mkdir tmpfs
sudo mount -t ext3 3 tmpfs/ -o loop
sudo cp -r rootfs/* tmpfs/
sudo umount tmpfs
6.启动qemu模拟器(图形化界⾯)qemu-system-arm -M vexpress-a9 -serial stdio -m 512M -dtb linux-4.4.1/extra_folder/ -kernel linux-4.4.1/extra_folder/zImage -append "root=/dev/mmcblk0 console=ttyAMA0
console=tty0" -sd 3参数说明:qemu-system-arm : ARM结构仿真-M vexpress-a9 :模拟vexpress-a9开发板-m 512M : 单板运⾏物理内存为512M-dtb :
Use file as a device tree binary (dtb) image and pass it to the kernel on boot-kernel 告诉qemu单板运⾏时内核镜像的位置-append "console=ttyAMA0" 内核启动参数,这⾥告诉内核vexpress单板运⾏,串⼝设备是那个tty
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1688593081a153157.html
评论列表(0条)