cubieboard + busybox 打造mini系統

來源:互聯網
上載者:User

本文打造一個迷你的LINUX系統,講述了arm嵌入式裝置的常用方法和過程。適合新手入門,當然最好還是知道什麼是交叉編譯,和懂得linux的基本命令。

先說說大致的思路,要在cubieboard板子上跑起來一個linux需要四大件:uboot,script-bin,linux核心(uImage),rootfs(這個我們自己做)

前面3個已經很多人寫過相關的文章了,我們不厭其煩的也多做一遍。

本文所用的系統是FC17-i686的系統,工具璉是4.7.2,arm-unknown-linux-gnueabi-,網上找的

需要準備的源碼:

busybox-1.21.0 

    google一搜一大吧。

linux 3.4.5

    git clone  https://github.com/linux-sunxi/linux-sunxi/tree/sunxi-3.4

sunxi-boards 

    git clone  https://github.com/linux-sunxi/sunxi-boards

sunxi-tools

    git clone  https://github.com/linux-sunxi/sunxi-tools

u-boot-sunxi

    git clone  https://github.com/linux-sunxi/u-boot-sunxi

準備好這些東東,我們就可以了開始幹活了,首先把SD卡拿出來,確保上面沒有重要的資料資料。

我建議大家用root使用者進行操作,不然經常使用sudo很麻煩

1.首先是給SD卡分區,假設你的卡是/dev/sdx

fdisk /dev/sdx

   我的卡是8g的,我的分區如下:

   /dev/sdb1            2048       34815       16384   83  Linux
   /dev/sdb2           34816    15122431     7543808   83  Linux

   分區大小可以按自己喜好,但第一個區要從2048開始,這個切記。什麼fdisk不會用?。。。。d是刪除,n是建立,w是儲存,q是退出。

分好區,就是要格式化了

mkfs.vfat /dev/sdx1

mkfs.ext4 /dev/sdx2

現在把它們mount到本地

mount /dev/sdx1 /mnt/card1

mount /dev/sdx2 /mnt/card2,沒有card目錄請自己建立。

在開始所有的編譯之前,我們要把交叉編譯工具加入到PATH的環境變數

比方我的工具包放在/tools下,arm-unknown-linux-gnueabi-在/tools/bin目錄下,那麼

export PATH="/tools/bin:$PATH"

這個只對當前終端和其子終端有效。

2.編譯uboot,

uboot是一個bootloader,有關他的介紹很多,我們在這裡不多做介紹了。

進入uboot-sunxi目錄:

make distclean CROSS_COMPILE=arm-unknown-linux-gnueabi-make cubieboard CROSS_COMPILE=arm-unknown-linux-gnueabi-

編譯完,執行命令

dd if=spl/sunxi-spl.bin of=/dev/sdb1 bs=1024 seek=8 dd if=u-boot.bin of=/dev/sdb1 bs=1024 seek=32

在tools/下有個檔案叫mkimage,以後編核心和boot.src會用上,把它拷貝到/usr/bin目錄下吧。如果你有的話,可以不這麼做。

cp tools/mkimage /usr/bin

3.編譯sunxi-tools

不需要什麼config,直接make

沒有看到error,就說明成功了,請直接到4,不成功繼續往下看。

如果出現報錯:

Package libusb-1.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libusb-1.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libusb-1.0' found
fel.c:21:20: 致命錯誤:libusb.h:沒有那個檔案或目錄
編譯中斷。
make: *** [fel] 錯誤 1

如果是ubuntu使用者,用apt-get install libusb-dev可以搞定。

但是如果和我一樣是用fedora使用者的話,就稍微麻煩點了。首先要去下一個叫libusb-1.0.9(版本號碼無所謂了)的包,解壓進入目錄

./configuremake CROSS_COMPILER=arm-unknown-linux-gnueabi-make installcp libusb/libusb.h /usr/includecp libusb-1.0.pc /usr/share/pkgconfig

4.編譯script-bin

這個最簡單

cd sunxi-boards/sys_config/a10/../../../sunxi-tools/fex2bin cubieboard.fex script.bin

把script.bin拷貝到/mnt/card1

cp script.bin /mnt/card1

5.編譯uImage

這個時間會稍微長點。其實也很簡單。不過有點要注意的,在linux下面解壓unzip有時候會缺少檔案,建議大家用7zip

make ARCH=arm sun4i_defconfigmake ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnueabi- uImage

同樣,把arch/arm/boot/uImage 拷貝到/mnt/card1

cp arch/arm/boot/uImage /mnt/card1

6.建立boot.src

cd /mnt/card1touch boot.cmdvi boot.cmd#按i輸入下面內容:setenv bootargs console=ttyS0,115200 root=/dev/mmcblk0p2 init=/sbin/init rootwait panic=10 ${extra}fatload mmc 0 0x43000000 script.binfatload mmc 0 0x48000000 uImagebootm 0x48000000#按esc 再按:wq儲存退出mkimage -C none -A arm -T script -d boot.cmd boot.scr

現在你的/mnt/card1下面應該有4個檔案:

boot.scr ; boot.cmd; uImage;script.bin;

開機磁碟分割的工作到此為止了。

7.編譯busybox

make ARCH=arm defconfigmake ARCH=arm menuconfig

busybox settings-->

      build option -->

           Build BusyBox as a static binary (no shared libs) 把這個選上,意思是靜態編譯

           Cross Compiler prefix  輸入交叉編譯器首碼,我這裡是:arm-unknown-linux-gnueabi-

networking Utilities  -->

      inetd 這個去掉,選上的話編譯會有問題。

如果出現錯誤:

miscutils/nandwrite.c:49:26: fatal error: mtd/mtd-user.h: No such file or directory
compilation terminated.
make[1]: *** [miscutils/nandwrite.o] 錯誤 1
make: *** [miscutils] 錯誤 

則使用命令,拷貝相應檔案

cp -Rv /usr/include/mtd/ include/

如果還缺少其它的,一樣道理

編譯完畢,

make install

預設裝在_install檔案夾下面

8.建立根檔案系統

把_install 下面的東東都拷貝到/mnt/card2

cp -Rv _install/* /mnt/card2

cp -Rv examples/bootfloppy/etc /mnt/card2

在mkdir下面建立檔案夾/dev /proc /sys /var /home /tmp /mnt /run等目錄

修改etc下面的fstab檔案如下:

proc /proc proc nosuid,noexec,nodev 0 0sysfs /sys sysfs nosuid,noexec,nodev 0 0devpts /dev/pts devpts gid=4,mode=620 0 0tmpfs /tmp tmpfs defaults 0 0devtmpfs /dev devtmpfs mode=0755,nosuid 0 0/dev/mmcblk0p1 /boot vfat defaults 0 2/dev/mmcblk0p2 / ext4 defaults,noatime 0 1

修改initab檔案如下:

::sysinit:/etc/init.d/rcS::askfirst:-/bin/sh

好了,umount 它們,嘗試啟動一下系統吧。

當你看到Please press Enter to activate this console,按一下,就可以進入終端了

網卡裝置還沒啟動。如果要啟動的話,也是可以的。不過不在這裡一一說明了。呵呵

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.