这里建议直接按照一已下方式直接安装:
sudo apt-get install gcc-arm-linux-gnueabi
其余的方式当然也可以,只不过个人用别的方式一直出问题。。。
可以使用:
git clone git://git.qemu-project.org/qemu.git
当然也可以:
sudo apt-get install qemu
在编译qemu之前先要安装几个软件包:
sudo apt-get install zlib1g-dev
sudo apt-get install libglib2.0-0
sudo apt-get install libglib2.0-dev
sudo apt-get install libtool
sudo apt-get install libsdll.2-dev
sudo apt-get install libpixman-1-dev
sudo apt-get install autoconf
接下来进入.../qemu
设置qemu,支持模拟arm架构下的所有单板:
./configure --target-list = arm-softmmu --audio-drv-list=
然后编译和安装,如果以上的软件包都安装的话,这里应该是没什么问题。
make
make install
我尝试了很多个版本的,但是内核版本是4.*的总是要出现qemu挂载不上的问题,不是知道是不是我某步骤的打开方式不对。这里找到一篇博文,情况和我差不多,按照他提到的内核版本最后成编译:
下载3.16版本的linux内核源代码包:
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.16.tar.xz
下载完成后,生成vexpress开发板子的config文件:
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm O=./out_vexpress_3_16 vexpress defconfig
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm O= ./out_vexpress_3_16 menuconfig
实际上这里可以直接这样:
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress defconfig
make menuconfig
生成的内核镜像会默认放到.../arch/arm/boot/下。
另外如果make menuconfig遇到什么问题的话,用:
sudo apt-get install libncurses5-dev
应该就能够解决。
然后编译:
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm O=./out_vexpress_3_16 zImage -j2
emmm,不出意外的话接下来会疯狂报错:
找一个conpiler-gcc5.h
搜索一下很多,很多要下载积分,要的积分还不少,实际上简单一点github上就有。
第三个方法可行。
接下来:
解决方案:
分别修改:
.../arch/arm/kernel下的return.c
.../arch/arm/include/asm下的ftrace.h为:
(return_address.c大致在文件的65行)
(ftrace.h大致在文件的48行)
剩下的事情差不多就是耐心等待
。。。 。。。
。。。 。。。
在命令行输入:
qemu-system-arm -M vexpress-a9 -m 512M -kernel linux-3.16/out_vexpress_3_16/arch/arm/boot/zImage -nographic -append "console=ttyAMA0"
结果:
首先下载buildroot: https://buildroot.org/download.html
下载完成后,解压至相应目录:
tar zxvf buildroot-2018.02.4
cd buildroot-2018.02.4
进入目录后,配置buildroot:
make menuconfig
首先是Target Architecture改成MIPS(little endian):
接下来Toolchain里的Kernel Headerslimian的linux版本设置为自己的linux内核版本,貌似都会自己默认设置正确?
设置完成后:
make
编译过程中可能会出现几个错误,缺少什么软件包就apt-get。
不过我这里出现了一个奇怪的错误:
但是我用:
sudo apt-get install g++
却显示g++已经最新版本,尝试查询:
g++ --version
却又提示未安装g++,最后直接:
sudo apt-get remove g++
sudo apt-get install g++
最后编译不报错:
make
等待漫长的编译过程:
。。。 。。。
。。。 。。。
完成后在buildroot-2018.02.4/下生成了一个新的文件夹output/
在/buildroot-2018.02.4/output/host/usr/bin/下可以看见mips交叉编译工具成功生成:
这里使用的是little endian(小端)编译生成的就是mipsel,如果一开始make menuconfig设置的是big endian(大端)编译生成的工具就是mips。
剩下最后一步,将mipsel-*-*的路径放到环境变量中:
环境变量设置有三种方法(不过实际上在我的配置环境(ubuntu16.04-x64)中只有第三种方法生效,直接export不用说,但是修改bashrc在我root之后当前用户添加的环境变量也失效了):
export PATH="$PATH:/home/kr0net/buildroot-2018.02.4/output/host/usr/bin/"
gedit ~/.bashrc
export PATH="$PATH:/home/kr0net/buildroot-2018.02.4/output/host/usr/bin/"
source /.bashrc
gedit /etc/profile
export PATH="$PATH:/home/kr0net/buildroot-2018.02.4/output/host/usr/bin/"
source /etc/profile
echo $PATH