《LINUX实战:Ubuntu下用QEMU搭建ARM Linux运行环境》要点: 本文介绍了LINUX实战:Ubuntu下用QEMU搭建ARM Linux运行环境,希望对您有用。如果有疑问,可以联系我们。
概述
模拟的单板为vexpress-a9,内核为cortex-a9;安装完qemu可用以下命令查看支持的机器:
qemu-system-arm -M ? 或qemu-system-arm -M help 没有支持ST公司的板子,有支持arm9,arm11,cortex-m3,cortex-a8,cortex-a9,cortex-a15这些架构其他公司的板子,不外好多都已经停产了.
我的Ubuntu版本为16.04,64位.
提示:1.在输入linux命令时,一定要注意当前目录和你命令中出现的文件的路径关系; 若提示找不到文件,则优先检查是不是路径错误 2.若提示权限不够,加上sudo enter后,输入你的用户暗码即可
搭建步调:
安装arm的交叉编译对象链
打开ubantu终端,输入
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install gcc-arm-linux-gnueabi
安装完后可用以下命令查看是否安装成功
dpkg -l gcc-arm-linux-gnueabi 出现ii gcc-arm-linux- 4:5.3.1-1ubu amd64 GNU C compiler for the armel arch 即注解安装成功.
安装qemu
sudo apt-get install qemu 查看安装的版本:
qemu-system-arm --version 显示版本QEMU emulator version 2.5.0 (Debian 1:2.5+dfsg-5ubuntu10.15),Copyright (c) 2003-2008 Fabrice Bellard
编译linux内核
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.13.tar.xz 树立放内核的文件夹
sudo mkdir linux-kernel
sudo chmod 777 linux-kernel
解压
xz -d linux-4.13.tar.xz
tar xvf linux-4.13.tar
编译内核
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm
生成的内核镱像位于arch/arm/boot/zImage 测试qemu和内核能否运行胜利
qemu-system-arm -M vexpress-a9 -m 512M -kernel /path/to/kernel/dir/arch/arm/boot/zImage -dtb /path/to/kernel/dir/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "console=ttyAMA0"
/path/to/kernel/dir/ 是内核的编译目录 当末行显示end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) 阐明内核正常加载,只是还没有根文件系统
制作根文件系统
wget http://www.busybox.net/downloads/busybox-1.27.2.tar.bz2 解压
tar xjf busybox-1.27.2.tar.bz2 在源代码目次运行
make defconfig
make CROSS_COMPILE=arm-linux-gnueabi-
make install CROSS_COMPILE=arm-linux-gnueabi-
安装完成后,该目录下生成的_install,即是根本的运行指令
创立rootfs目录
sudo mkdir rootfs
sudo mkdir rootfs/lib
完善根文件系统,先回到_install的父目次
mkdir _install/pro
mkdir _install/sys
mkdir _install/tmp
mkdir _install/root
mkdir _install/var
mkdir _install/mnt
mkdir _install/Home
mkdir -p _install/etc/init.d
git clone https://github.com/mahadevvinay/Embedded_Linux_Files.git
cp Embedded_Linux_Files/fstab _install/etc
cp Embedded_Linux_Files/inittab _install/etc
cp Embedded_Linux_Files/rcS _install/etc/init.d
更改rcS的权限
chmod a+x _install/etc/init.d/rcS 复制完,不必要Embedded_Linux_Files,删除掉
sudo rm -rf Embedded_Linux_Files
拷贝busybox命令
sudo cp path/_install/* -r rootfs path是你本身放_install的路径 从工具链中拷贝运行库到lib下
sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib 注意所有命令中文件若不在当前的文件夹中,都要加上绝对路径 创建4个tty终端设备
sudo mkdir -p rootfs/dev
sudo mknod rootfs/dev/tty1 c 4 1
sudo mknod rootfs/dev/tty2 c 4 2
sudo mknod rootfs/dev/tty3 c 4 3
sudo mknod rootfs/dev/tty4 c 4 4
生成ext3镜像文件并挂载
sudo dd if=/dev/zero of=path/a9rootfs.ext3 bs=1M count=32 path为父目录路径,若当前目录是父目录则不消
mkfs.ext3 path/a9rootfs.ext3
mkdir tmpfs
sudo mount -t ext3 path/a9rootfs.ext3 path/tmpfs -o loop
sudo cp -r path/rootfs/* path/tmpfs
sudo umount path/tmpfs
启动qemu模拟系统
sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel path/arch/arm/boot/zImage -dtb path/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 console=ttyAMA0" -sd path/a9rootfs.ext3 依照终端最后一行的指示,按下enter键,即进入到模拟出的单板的根文件系统,输入ls 可看到所制作的文件
运行hello world
在用户目次下vim hello.c 输入:
#include <stdio.h>
int main()
{
printf("hello world!");
return 0;
}
编译法式,注意用交叉编译工具编译
arm-linux-gnueabi-gcc-5 hello.c -o hello 将法式拷到rootfs目录下执行以下命令:
sudo mount -t ext3 path/a9rootfs.ext3 path/tmpfs -o loop
sudo cp -r path/rootfs/* path/tmpfs
sudo umount path/tmpfs
path为你的路径
启动qemu模拟系统
sudo qemu-system-arm -M vexpress-a9 -m 512M -kernel path/arch/arm/boot/zImage -dtb path/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0 console=ttyAMA0" -sd path/a9rootfs.ext3 依照终端最后一行的指示,输入ls 可看到所制作的文件 输入./hello 即可看到打印出hello world!
本文永远更新链接地址: 更多LINUX教程,尽在编程之家PHP学院专栏。欢迎交流《LINUX实战:Ubuntu下用QEMU搭建ARM Linux运行环境》! (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|