BuildRoot FOR BeagleBone

BeagleBone 剛買沒兩天,裏面配的是AngStorm 系統,也是基於Linux 內核的一種嵌入式發行版本,這裏就不展開了,另有文章介紹。這裏要說的是BuildRoot ,Why BuildRoot? 吸引個人首先是其對BeagleBone 的原生支持,不須要我另行移植了;其次是其大小,相較於Angstrom 與 Ubuntu 的體積來講,BuildRoot 真是很是袖珍,除去你們都同樣的bootloader 與 Kernel 不算,根文件系統只有4MB 左右,還包括了uClibc…… 固然咱們能夠在編譯的時候指定第三方的編譯環境,好比Ti SDK 或是 cross-N,libc 也可使用諸如eglibc 和 標準的glibc,這都不是問題。更詳細的介紹參見其官方網站 http://buildroot.uclibc.org/ ,此項目到目前爲止還在維護中。linux

image

-1 BuildRoot 組成git

下面詳細記錄一下編譯BuildRoot FOR BeagleBone 的過程。
(1) 首先固然是去BuildRoot 官網下載最新版本的BuildRoot 了,這個不細說。 ubuntu

(2) 閱讀BuildRoot 介紹文檔,總共30來頁,認真讀,日後會在使用過程當中節約很多時間。 svn

(3) 下載BuildRoot 的必備軟件,ubuntu 12.04下執行命令「sudo apt-get install git-core bison flex g++ gettext texinfo libncurses5-dev」. 固然了svn 什麼的最好也下載下來,由於BuildRoot 會自動下載一些軟件源碼,git svn 什麼的都是必要的;curses 是爲了執行make menuconfig 的,要使用xconfig qt 運行時庫也是必不可少的。 工具

(4) OK,在BuildRoot 根目錄中執行「make *-config」命令,效果是從configs 目錄中選取一個默認配置文件對BuildRoot 進行粗配置。這裏咱們使用「make beaglebone_defconfig」選取針對beaglebone 的配置。其實這一步事後就能夠執行「make」 編譯整個開發環境與Linux 操做系統與 根文件系統了,但此時咱們還能夠針對Linux 內核與 根文件系統進行一些配置。我在這裏執行「make menuconfig」 添加了GDB-server,配置C 庫 對線程和IPv6 的支持。哦,差點忘了說,若是不想生成只讀的文件系統的話,要修改圖二最後一張圖中的選項。開發工具

image

image

image
image
圖-2 配置BuildRootflex

(5) 根據須要使用「make linux-menuconfig | uclibc-menuconfig | busybox-menuconfig」對內核,c庫或是busybox 進行配置。 網站

(6) 執行make ,而後喝杯茶,洗個澡,睡一覺,陪女友(沒女友的陪老媽)看場電影(悲慘世界不錯),嗯,可能就執行完畢了。此時,能夠在output/images 文件夾下看到生成的四個文件,如圖-1 所示。 ui

(7) 準備一張MicoSD card,至少將其分兩個區(咱們使用DOS形式的分區格式,分區爲主分區),一個存放bootloader與內核(好吧,內核你也能夠存放在第二個分區中,甚至你也能夠只要一個分區,這取決於你的人生態度……扯遠了),一個存放根文件系統。Linux 中可使用sfdisk 命令完成。好比使用: es5

sudo sfdisk -H 255 -S 63 /dev/XXXXXX << EOF 0,9,c,* ,124 EOF 
sudo mkfs.vfat /dev/XXXXXX -n boot

這樣分區就完成了。

(8) 將第(6)步中生成的文件拷貝到分區中。

# Copy the bootloaders and the Linux kernel cp MLO u-boot.img uImage /media/boot # Copy the root file system (replace sdd2 with the second partition of right # device) sudo dd if=rootfs.ext2 of=/dev/sdd2 bs=128k

注意MLO必定要是boot分區中的第一個文件,其餘的拷貝次序沒什麼大的關係。 還有,這裏咱們使用dd 直接將根文件系統寫入SD card 的分區中,我不太建議這麼作…… 好的辦法是先使用分區工具將SD 的第二個分區格式化成ext2 格式,然後解壓rootfs.ext2,將解壓後的文件所有拷入新分區中,OK,大功告成!將SD CARD 插入BeagleBone ,重啓開發板!等等,問題來了……

(9) 配置uEnv.txt 文件。OK,我認可是我錯誤的將uImage 放到第一個分區中才致使uBoot 加載不了kernel 的,但使用uEnv.txt 但是讓咱們配置本身想要的啓動效果,從NFS 啓動也何嘗不可。先來看看hardcode 的bootcmd 是什麼樣子的:

if mmc rescan ${mmcdev}; then 
    echo SD/MMC found on device ${mmcdev};
    if run loadbootenv; then
        echo Loaded environment from ${bootenv};
        run importbootenv;
    fi;
   if test -n $uenvcmd; then
        echo Running uenvcmd ...;
       run uenvcmd;
    fi;
    if run loaduimage; then
        run mmcboot;
    fi;
fi;

其中bootenv 變量中存儲的就是「uEnv.txt」,咱們將「uEnv.txt」放在第一個分區中就好了。咱們在uEnv.txt 中指定uenvcmd 變量後在稍後就會執行,這裏不細說細節,個人uEnv.txt以下:

uenvcmd=if fatload mmc 0 0x80200000 uImage; then run mmcboot; fi;

不知怎麼搞的,若是我在uEnv.txt 中覆蓋原來已有的變量會致使fatload 執行失敗,我這裏就直接寫fatload 的所有命令了。mmcboot 展開來世這樣子的:

#mmcboot 
echo Booting from mmc ...; run mmcargs; bootm 0x80200000

#mmcargs
setenv bootargs console=ttyO0,115200n8 root=/dev/mmcblk0p2 ro rootfstype=ext4 rootwait

嗯,至此BuildRoot 就能夠正常啓動運行了。至於生成的開發工具,位於「output/host/usr」下,添加一下環境變量就好了。

相關文章
相關標籤/搜索