1. 程式人生 > >ubuntu下使用qemu模擬ARM(四)-------編譯busybox

ubuntu下使用qemu模擬ARM(四)-------編譯busybox

上面已完成了u-boot,kernel現在我們來做一個根檔案系統

用busybox製作根檔案系統

1.下載Busybox,

官方下載地址:https://busybox.net/downloads/ sudo mkdir root_system 將下載後的檔案放入/qemu_arm/root_system中

2.解壓

[email protected]:/qemu_arm/root_system$ tar xjf busybox-1.26.2.tar.bz2 

3.編譯

make clean make menuconfig 在”Busybox Settings ---> Build Options --->“ 關閉“Build BusyBox as a static binary。
開啟”Build shared libbusybox“。
關閉”Produce a binary for each applet“與”Produce additional busybox binary“。
儲存退出
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- install
生成的檔案就放在_install目錄中了

4.檢視要用到的動態庫

方式1: [email protected]:/qemu_arm/root_system/busybox-1.26.2/_install/bin$ arm-none-linux-gnueabi-readelf -d busybox| grep NEEDED
 0x00000001 (NEEDED)                     Shared library: [libm.so.6]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
[email protected]:/qemu_arm/root_system/busybox-1.26.2/_install/bin$ 
方式2:
[email protected]
:/qemu_arm/root_system/busybox-1.26.2/_install/bin$ arm-none-linux-gnueabi-objdump -x busybox| grep NEEDED
  NEEDED               libm.so.6
  NEEDED               libc.so.6
[email protected]:/qemu_arm/root_system/busybox-1.26.2/_install/bin$ 
方式3: [email protected]:/qemu_arm/root_system/busybox-1.26.2/_install/bin$ strings busybox | grep lib
/lib/ld-linux.so.3
libm.so.6
libc.so.6
__libc_start_main
/lib/modules
/var/lib/misc/udhcpd.leases
/lib/firmware
/var/lib/dpkg/info/%s.%s
/var/lib/dpkg/status
/var/lib/dpkg/status.udeb
/var/lib/dpkg/status.udeb.bak
shlibs
[email protected]
:/qemu_arm/root_system/busybox-1.26.2/_install/bin$ 
方式4: ldd busybox
顯示:not a dynamic executable     //不知為什麼 ,原因有待查詢 //-------------應該顯示為下面的提示才是正確的----------------- linux-gate.so.1 =>  (0xb775d000)
        libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb76ea000)
        libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7530000)
        /lib/ld-linux.so.2 (0x800ab000)
//--------------這說明 linux.so.2的庫還是存在依賴關係-------------

5.將編譯後的檔案拷到一個資料夾(rootfs)中:

 sudo mkdir rootfs
sudo chmod 777 rootfs/
sudo cp busybox-1.26.2/_install/* -r rootfs/
6.將busybox-1.26.2/examples/bootfloppy下的etc資料夾拷到rootfs資料夾中 [email protected]:/qemu_arm/root_system/rootfs$ sudo mkdir etc
[email protected]:/qemu_arm/root_system/rootfs$ sudo chmod 777 etc
[email protected]:/qemu_arm/root_system/rootfs$ sudo cp -r /qemu_arm/root_system/busybox-1.26.2/examples/bootfloppy/etc/* etc/

6.拷貝連結檔案

查詢libm.so.6檔案位置  [email protected]:/qemu_arm/root_system/rootfs$ arm-none-linux-gnueabi-readelf -d bin/busybox | grep NEEDED
 0x00000001 (NEEDED)                     Shared library: [libm.so.6]
 0x00000001 (NEEDED)                     Shared library: [libc.so.6]
[email protected]:/qemu_arm/root_system/rootfs$ locate libm.so.6 //查詢在哪裡
/arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/armv4t/lib/libm.so.6
/arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/lib/libm.so.6   //我們拷這個檔案
/arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/thumb2/lib/libm.so.6

/lib/i386-linux-gnu/libm.so.6

[email protected]:/qemu_arm/root_system/rootfs$  查詢libc.so.6檔案位置
[email protected]:/qemu_arm/root_system/rootfs$ locate libc.so.6
/arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/armv4t/lib/libc.so.6
/arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/lib/libc.so.6  //我們拷這個庫檔案
/arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/thumb2/lib/libc.so.6
/lib/i386-linux-gnu/libc.so.6

[email protected]:/qemu_arm/root_system/rootfs$ 
[email protected]:/qemu_arm/root_system/rootfs$ sudo mkdir lib
[email protected]:/qemu_arm/root_system/rootfs$ sudo chmod 777 lib

[email protected]:/qemu_arm/root_system/rootfs$ cp /arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/lib/lib*.so.6 lib   //檔案庫沒拷全,啟動時會提示 Kernel panic - not syncing: No working init found. 

[email protected]:/qemu_arm/root_system/rootfs$ cp /arm-none-linux-gnueabi/arm-2014.05/arm-none-linux-gnueabi/libc/lib/*.so*  lib

7.建立4個tty端終裝置

[email protected]:/qemu_arm/root_system/rootfs$ sudo mkdir dev
[email protected]:/qemu_arm/root_system/rootfs$ sudo mknod dev/tty1 c 4 1
[email protected]:/qemu_arm/root_system/rootfs$ sudo mknod dev/tty2 c 4 2
[email protected]:/qemu_arm/root_system/rootfs$ sudo mknod dev/tty3 c 4 3
[email protected]:/qemu_arm/root_system/rootfs$ sudo mknod dev/tty4 c 4 4

8.製作根檔案系統映象

1. 生成32M大小的映象
 busybox-1.26.2  busybox-1.26.2.tar.bz2  rootfs
[email protected]:/qemu_arm/root_system$ dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32
32+0 records in
32+0 records out
33554432 bytes (34 MB, 32 MiB) copied, 0.31139 s, 108 MB/s
[email protected]:/qemu_arm/root_system$ 
2. 格式化成ext3檔案系統
[email protected]:/qemu_arm/root_system$ mkfs.ext3 a9rootfs.ext3 
3.  將檔案拷貝到映象中
[email protected]:/qemu_arm/root_system$ sudo mkdir tmpfs
[email protected]:/qemu_arm/root_system$ sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop
[email protected]:/qemu_arm/root_system$ sudo cp -r rootfs/* tmpfs/
[email protected]:/qemu_arm/root_system$ sudo umount tmpfs
9.用Qemu測試生成的根檔案系統 qemu-system-arm -M vexpress-a9 -m 512M -kernel /qemu_arm/linux-kernel/linux-3.16.39/arch/arm/boot/zImage -nographic -append "root=/dev/mmcblk0  console=ttyAMA0" -sd /qemu_arm/root_system/a9rootfs.ext3
顯示一大堆資訊,最後出現提示如下:   #0: ARM AC'97 Interface PL041 rev0 at 0x10004000, irq 43
input: ImExPS/2 Generic Explorer Mouse as /devices/mb:kmi1/serio1/input/input2
kjournald starting.  Commit interval 5 seconds
EXT3-fs (mmcblk0): mounted filesystem with writeback data mode
VFS: Mounted root (ext3 filesystem) readonly on device 179:0.
Freeing unused kernel memory: 244K (805d6000 - 80613000)
random: nonblocking pool is initialized
mount: mounting proc on /proc failed: No such file or directory


Processing /etc/profile... Done


/ # 
說明核心已啟動並且掛接了檔案系統,此時已可以使用busybox的命令集了.

遇到的問題:

make clean make menuconfig make  make install 後生成的busybox不能用在ARM開發板中,因為沒有修改過MAKEFILE檔案所以就沒有指定用交叉編譯工具並且也不是arm的檔案格式 可使用file busybox檢視 [email protected]:/qemu_arm/root_system/busybox-1.26.2/_install/bin$ file busybox 
busybox: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.16, stripped
注意紅色字ARM,這才是用於arm開發板的busybox 根檔案能掛接上,但不能執行,提示: Kernel panic - not syncing: No working init found. 
使用file命令檢視 [email protected]:/qemu_arm/root_system/rootfs$ file linuxrc 
linuxrc: symbolic link to bin/busybox
[email protected]:/qemu_arm/root_system/rootfs$ file /bin/busybox 
/bin/busybox: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=3009223865ed1ed7bfab5468767d7cd504d6ef49, stripped
還有要注間的就是連結庫的檔案要拷全,不能只拷libm.so.6和[libc.so.6兩個 另一個可能就在於上面提示的80386,可能在製作的過程中沒有指定ARCH=arm造成的

參考文件:

http://blog.csdn.net/f413933206/article/details/6534685

相關推薦

ubuntu使用qemu模擬ARM()-------編譯busybox

上面已完成了u-boot,kernel現在我們來做一個根檔案系統 用busybox製作根檔案系統 1.下載Busybox, 官方下載地址:https://busybox.net/downloads/ sudo mkdir root_system 將下載後的檔案放入/qe

ubuntu使用qemu模擬ARM(三)------編譯核心

上一章將u-boot編譯完成並用Qemu進行了測試,這一單我們來編譯核心 Linux核心編譯 下載Linux核心 官方下載地址:https://www.kernel.org/pub/linux/kernel/ sudo mkdir linux-kernel s

在Ubentu環境創建arm交叉編譯環境

老師 build 目錄 更新 hello 分享 date win 例程 學校:華中科技大學機械學院 作業任務:在Ubentu環境下創建arm交叉編譯環境並且在虛擬機中編譯例程 首先,利用U盤安裝windows10+Ubuntu16.04雙系統,系統剛開始安裝,需要執行以下兩

CentOS 7 利用qemu模擬ARM vexpress A9開發板

ogr install 進入 復制 不同 .html ini 依賴 roo 聽說qemu用於仿真arm很不錯,今日就來試了一把。由於剛剛開始,了解的並不多。本文僅僅記錄Qemu裝載Linux kernel和busybox根文件系統的過程。後續將會深入了解仿真的其他內容。 先

ubuntu進程kidle_inject致使編譯軟件很慢

相關 tel 方法 AC idle ech idl 占用 ubun 一.背景 某一天編譯一個程序發現半天都沒編譯ok,於是使用top一看發現有個別進程占用cpu奇高,遂出此文 二.怎麽解決? 2.1 什麽進程占據很高cpu 名為kidle_inject,同時開啟了好幾個

Ubuntuprotobuf的安裝、編譯及注意事項

Ubuntu下編譯protobuf 1.下載protobuf 下載地址:https://github.com/google/protobuf/releases 2.編譯protobuf 解壓下載的zip包,cd到protobuf的目錄下,執行以下指令: tar -xvf pro

ubuntuc/c++/python/go編譯執行

  C語言: .c檔案 編譯器gcc//my_code下hello.c檔案 $sudo apt install gcc $gcc hello.c -o hello $./hello   C++: .cpp檔案 編譯器g++//my_code下hello.cpp檔案

ubuntuc/c++/python/go編譯運行

工程 ubunt ubuntu下 python 執行 ++ blog 當前 com C語言: .c文件 編譯器gcc//my_code下hello.c文件 $sudo apt install gcc $gcc hello.c -o hello $./hello

qemu模擬arm執行linux,掛載nfs

掛載nfs,方便除錯pc:開啟兩個終端,其中一個輸入如下命令,開啟qemuqemu-system-arm -M vexpress-a9 -smp 4 -m 256M -kernel arch/arm/boot/zImage -append "rdinit=/linuxrc c

qemu 模擬-arm-mini2440開發板-啟動u-boot,kernel和nfs檔案系統

qemu 本文介紹瞭如何編譯u-boot、linux kernel,然後用qemu啟動u-boot和linux kernel,達到與開發板上一樣的學習效果! 雖然已經買了2440開發板,但是在實際學習開發過程中,還是覺得不方便,既然這樣,那就用qemu模擬2440開發板,

ubuntu在模擬器上執行編譯後的android原始碼

 前提是Ubuntu下已經編譯好了下載的安卓原始碼, 選擇最後一行的 android-sdk_r23.0.2-linux.tgz下載 第二步,解壓android-sdk_r23.0.2-linux.tgz ,比如說你解壓後的SDK所有檔案在/usr/local/src

qemu模擬arm系統vexpress-a9—uboot+uImage

1 概述 上一篇檔案介紹了qemu環境搭建,用核心映象zImage執行模擬器,可以很方便除錯核心。但現在嵌入式arm處理器廠商都會發布uboot+uImage的sdk形式給產品公司,有時候需要除錯uboot程式碼執行情況或是傳入到核心引數是否生效等等,所以模擬uboot

Ubuntu 16.04 安裝ARM交叉編譯工具

    我安裝的ARM 編譯器是:toolchain_gnueabi-4.4.0_ARMv5TE,其他的編譯器也是一樣的安裝方式,可以參考1)安裝交叉編譯器----------------------$>tar zxvf toolchain_gnueabi-4.4.0_

ubuntugsoap支援openssl的編譯及簡單使用

問題: 我第一次下的是gsoap_2.8.69(當前最新版),但是折騰了許久還是沒安裝安裝成功,於是下了個gsoap_2.8.60,就成功了,果然是新版有風險!! 參考文章 安裝過程 依賴庫的安裝 主要安裝過程中主要是各依賴庫需要一一安裝

Ubuntu配置Anaconda、Pycharm編譯環境

1. 必要性 Linux比Windows做開發實在是要強太多了。自帶的Python編譯器,命令列模式,讓程式設計師都非常的喜歡。而且最重要的是,使用Linux,你感覺自己真的是在使用程式設計的方式運用這臺計算機。而使用Windows,你真覺得一切都是Windo

Ubuntu使用SublimeText3配置C++編譯環境的一些設定分享

最近開始接觸Ubuntu系統,在嘗試使用Sublime Text3配置C++編譯環境後,發現每次使用g++編譯如果程式涉及cin等輸入互動時,都需要自己呼叫終端執行,非常不方便。下面給出一種自動呼叫終端編譯執行的方法: 新建編譯系統,輸入如下指令,並儲存為新

ubuntucisco模擬環境dynamips安裝與初步使用

   1.首先要安裝libpcap這個經典的網路資料捕獲包,我是以前就安裝過了,所以這步省率,網上的教程一大把。    2.安裝dynamips+dynagen,我新建了一個資料夾來儲存安裝的所需檔案 這裡為什麼會有兩個軟體,我的理解是dynamips相當與我們以往裝的虛擬

ubuntu使用qemu-system-arm模擬arm環境

最近由於學習需要,開始搭建嵌入式開發環境,但苦於硬體平臺還沒有弄好,故先在ubuntu環境下進行模擬。     以下方法將在ubuntu10.10主機上,利用qemu-system-arm安裝一個arm11的作業系統。系統採用nfs方式掛載檔案系統,可以用來模擬arm11的

ubuntu使用qemu-arm-static進入chroot編譯環境

轉載請註明出處:http://blog.csdn.net/arriod/archive/2010/08/25/5837286.aspx 目的是在arm下建立一套完整的編譯環境,安裝完編譯環境後,如果一直使用qemu來模擬整個arm系統的話,速度會很慢。由於qemu還可以模擬arm-linux應用層的軟體。感

一步步教你如何在Ubuntu虛擬機器中安裝QEMU模擬模擬arm 開發環境(一)uImage u-boot

初次接觸qemu是因為工作的需要,有時候下了班,可能需要在家研究一些東西,因為博主用到arm環境,這時候博主比較小氣,不願花錢買開發板,當然博主在這裡給大家的建議是,如果要真正學懂arm構架的相關知識,還是單獨買一塊arm的開發板,慢慢摸索吧,畢竟這才是最好的學習方法,如果