QEMU學習筆記

========
源碼安裝
    $ 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/'

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章