有點繁瑣,整理一下,系統環境centos6.6,虛擬機以及實際系統中測試通過。
一、交叉編譯器的下載與安裝
1、下載地址:http://blog.csdn.net/dldw8816/article/details/46004167
下載其中的解壓版。
2、然后解壓縮
tar jxvf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
3、添加環境變量,假定壓縮包所在目錄為/home,解壓后目錄為arm-2014.05。
vim /etc/profile
在最下面添加
export PATH=$PATH:/home/arm-2014.05/bin
然后更新
source /etc/profile
4、測試是否安裝成功
arm-none-linux-gnueabi-gcc -v
二、qemu的安裝
參考網站http://blog.csdn.net/oxford_d/article/details/51823473
wget https://download.qemu.org/qemu-2.11.0.tar.xz tar xvJf qemu-2.11.0.tar.xz cd qemu-2.11.0 ./configure make -j8 make install
說明:
$./configure --enable-kvm --enable-debug --enable-vnc --enable-werror --target-list=arm-softmmu --audio-drv-list=
configure腳本用於生成Makefile,其選項可以用./configure --help查看。這里使用到的選項含義如下:
--enable-kvm:編譯KVM模塊,使QEMU可以利用KVM來訪問硬件提供的虛擬化服務。
--enable-vnc:啟用VNC。
--enalbe-werror:編譯時,將所有的警告當作錯誤處理。
--target-list:選擇目標機器的架構。默認是將所有的架構都編譯,但為了更快的完成編譯,指定需要的架構即可。
三、uboot安裝
參考網站http://blog.csdn.net/aggresss/article/details/54945726
1、源文件下載http://ftp.denx.de/pub/u-boot/
2、解壓源文件
tar jvxf u-boot-2018.01.tar.bz2 -C xxxx (xxx為需要解壓的目錄)
3. 進入U-Boot 源文件目錄,然后執行:
export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabi- make vexpress_ca9x4_defconfig make
編譯完成后,如果目錄下生成 u-boot 文件,則說明編譯成功。
4. 在U-Boot源碼目錄下編寫腳本 run.sh
qemu-system-arm \ -M vexpress-a9 \ -nographic \ -m 512M \ -kernel u-boot
然后 chmod +x run.sh 增加文件執行權限。
5. 最后執行 ./run.sh,可以看到啟動了bootloader,但是會提示沒有映像文件
四、內核編譯
參考博文http://blog.csdn.net/aggresss/article/details/54946438
內核源碼下載地址:https://www.kernel.org/pub/linux/kernel/v4.x/
1、從arch/arm/configs下找到需要編譯內核的配置文件vexpress_defconfig,復制到源碼根目錄下
2、執行命令
export ARCH=arm export CROSS_COMPILE=arm-none-linux-gnueabi- make vexpress_defconfig make zImage make modules make dtbs
3、編譯后生成 在 arch/arm/boot 目錄下生成 zImage 文件,則說明編譯成功。
五、編譯busybox,目的是制作根文件系統
1、從https://busybox.net/downloads/下載busybox
2、進入 Busybox 源文件目錄下執行 make menuconfig,如果報錯,則yum list *ncurses*,然后安裝列出來的東西
Busybox Settings ---> [*] Build BusyBox as a static binary (no shared libs) (arm-none-linux-gnueabi-) Cross Compiler prefix
3、編譯
make
make install
_install 目錄下生成 需要的文件 bin linuxrc sbin usr 。
六、根文件系統制作
1、創建一個空白文件,32M
dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32
2、格式化
mkfs.ext3 a9rootfs.ext3
3、創建根文件系統目錄
mkdir rootfs
4、拷貝busybox下的文件
cp busybox-1.20.2/_install/* -r rootfs/
5、拷貝交叉編譯器的lib
mkdir rootfs/lib/ cp -P /xxx/arm-none-linux-gnueabi/lib/* rootfs/lib/
6、創建終端設備
mkdir rootfs/dev/ mknod rootfs/dev/tty1 c 4 1 mknod rootfs/dev/tty2 c 4 2 mknod rootfs/dev/tty3 c 4 3 mknod rootfs/dev/tty4 c 4 4 mknod rootfs/dev/console c 5 1 mknod rootfs/dev/null c 1 3
7、創建必要目錄
mkdir -p rootfs/proc/ mkdir -p rootfs/sys/ mkdir -p rootfs/tmp/ mkdir -p rootfs/root/ mkdir -p rootfs/var/ mkdir -p rootfs/mnt/
8、創建臨時目錄並與空白文件映射,目的是將根文件系統拷貝進去
mkdir tmpfs mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop rootfs/* tmpfs/ -r umount tmpfs
建立一個目錄,將zImage,vexpress-v2p-ca9.dtb,_install目錄拷貝在一個目錄下
vim mkrootfs.sh
1 rm -rf rootfs 2 rm -rf tmpfs 3 rm -f a9rootfs.ext3 4 5 mkdir rootfs 6 cp ./_install/* rootfs/ -raf 7 mkdir -p rootfs/proc/ 8 mkdir -p rootfs/sys/ 9 mkdir -p rootfs/tmp/ 10 mkdir -p rootfs/root/ 11 mkdir -p rootfs/var/ 12 mkdir -p rootfs/mnt/ 13 14 cp -arf /home/yuanlj/arm-2014.05/arm-none-linux-gnueabi/lib rootfs/ 15 rm rootfs/lib/*.a 16 arm-none-linux-gnueabi-strip rootfs/lib/* 17 18 mkdir -p rootfs/dev/ 19 mknod rootfs/dev/tty1 c 4 1 20 mknod rootfs/dev/tty2 c 4 2 21 mknod rootfs/dev/tty3 c 4 3 22 mknod rootfs/dev/tty4 c 4 4 23 mknod rootfs/dev/console c 5 1 24 mknod rootfs/dev/null c 1 3 25 26 dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32 27 mkfs.ext3 a9rootfs.ext3 28 29 mkdir -p tmpfs 30 mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop 31 cp -r rootfs/* tmpfs/ 32 umount tmpfs
七、啟動
qemu-system-arm -nographic -sd a9rootfs.ext3 -M vexpress-a9 -m 512M -kernel zImage -dtb vexpress-v2p-ca9.dtb -append "init=/linuxrc root=/dev/mmcblk0 rw rootwait earlyprintk console=ttyAMA0" qemu-system-arm -serial stdio -sd a9rootfs.ext3 -M vexpress-a9 -m 512M -kernel zImage -dtb vexpress-v2p-ca9.dtb -append "init=/linuxrc root=/dev/mmcblk0 rw rootwait earlyprintk console=ttyAMA0"
注意:
1、以上在編譯前請確保export ARCH=arm ;export CROSS_COMPILE=arm-none-linux-gnueabi-
2、若報錯,一般是某些庫沒有包含,自行百度或google