========
源碼安裝
$ mkdir build # 直接在根目錄編譯會產生大量的配置文件
$ cd build
$ ../configure
$ make
$ sudo make install
可能需要:
$ sudo apt-get install libpixman-1-dev
$ sudo apt-get install libglib2.0-dev
注意:
源碼安裝在編譯結束後會產生大量的.o文件
安裝交叉編譯器
==============
$ sudo apt-get install gcc-arm-linux-gnueabihf
編譯u-boot
==========
$ make vexpress_ca9x4_defconfig
$ make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm # 編譯會生成u-boot.bin
安裝QEMU需要的網絡功能
======================
以下方法基於QEMU2.5.0,高版本可能用不了
$ sudo apt-get install uml-utilities
$ sudo apt-get install bridge-utils
確保這些文件是存在的:(Ubuntu默認是存在的)
/dev/net/tun
/etc/qemu-ifup
/etc/qemu-ifdown
修改/etc/network/interfaces
auto lo
iface lo inet loopback
auto ens33
auto br0
iface br0 inet dhcp
bridge_ports ens33
# 注意ens33可能不是你的網卡名,你得填你自己的網卡名
重啓Ubuntu
virtualbox需要設置成橋接模式(我不確定是不是真的需要這個)
QEMU啓動u-boot
==============
sudo qemu-system-arm \
-M vexpress-a9 \
-m 512M \
-nographic \
-kernel u-boot \
-net nic,vlan=0 \
-net tap,vlan=0,ifname=tap0
編譯linux
==========
$ make ARCH=arm vexpress_defconfig
$ make LOADADDR=0x60003000 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs # 編譯設備樹
安裝TFTP服務器
==============
$ sudo apt-get install xinetd
$ sudo apt-get install tftp tftpd
$ vim /etc/xinetd.d/tftp # 把下面的內容寫入這個文件,別忘了創建/home/sam/Work/tftp_share這個目錄
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /home/sam/Work/tftp_share
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
$ sudo /etc/init.d/xinetd restart
u-boot從tftp下載內核鏡像並啓動
==============================
> setenv ipaddr xxx
> setenv serverip xxx
> setenv bootargs 'root=/dev/mmcblk0 console=tty0' # 如果沒有文件系統,添加這句會死機
> saveenv
> tftp 0x60003000 uImage
> tftp 0x60500000 vexpress-v2p-ca9.dtb
> bootm 0x60003000 - 0x60500000
製作BUSYBOX文件系統
====================
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- defconfig
$ make ARCH=arm menuconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
$ make install
製作文件系統鏡像
================
$ dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32
$ mkfs.ext3 a9rootfs.ext3
$ sudo mount -t ext3 a9rootfs.ext3 /mnt -o loop
$ sudo cp -r $BUSYBOX/_install/* /mnt
$ sudo mkdir /mnt/lib
$ sudo cp -p $CROSS_COMPILE_LIB_PATH/* /mnt/lib
$ sudo mkdir -p /mnt/dev
$ cd /mnt/dev
$ sudo mknod -m 666 null c 1 3
$ sudo mknod -m 666 console c 5 1
$ cd ~
$ sudo umount /mnt
BUSYBOX是BUSYBOX的編譯目錄。可以這樣設置:BUSYBOX='/home/sam/Work/busybox-1.24.2'
CROSS_COMPILE_LIB_PATH是交叉編譯器的庫目錄,可以使用這個命令獲取:
arm-linux-gnueabihf-gcc -print-file-name=libc.a
意思是獲取libc.a的路徑,從輸出打印中去掉"libc.a"就是lib路徑了。可以這樣設置:
CROSS_COMPILE_LIB_PATH='/usr/lib/gcc-cross/arm-linux-gnueabihf/5/../../../../arm-linux-gnueabihf/lib/../lib/'