zoukankan      html  css  js  c++  java
  • ubantu下用qemu搭建arm+linux运行环境

    ubantu下用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这些架构其他公司的板子,不过好多都已经停产了。
    我的ubantu版本为16.04,64位。
    可以上网搜索相关博客,我参考的主要博客是 从零使用qemu模拟器搭建arm运行环境ARM Versatile Express Emulation On Qemu From Scratch: Part 1

    提示:1.在输入linux命令时,一定要注意当前目录和你命令中出现的文件的路径关系;
    若提示找不到文件,则优先检查是不是路径错误
    2.若提示权限不够,加上sudoenter后,输入你的用户密码即可

    搭建步骤:

    安装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 rootfspath是你自己放_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
    按照终端最后一行的指示,按下enter键,即进入到模拟出的单板的根文件系统,输入ls可看到所制作的文件
    输入./hello
    即可看到打印出hello world!

  • 相关阅读:
    《人月神话》阅读笔记03
    《人月神话》阅读笔记02
    《人月神话》阅读笔记01
    《构建之法》阅读笔记03
    《构建之法》阅读笔记02
    蚂蚁通信框架实践
    红黑树
    漫画算法:什么是红黑树
    Java中的锁分类与使用
    JAVA CAS原理深度分析
  • 原文地址:https://www.cnblogs.com/hxwater/p/7529108.html
Copyright © 2011-2022 走看看