這篇文章中不討論 u-boot, 因此編譯的核心是 zImage 而非 uImage。只利用 initramfs 執行一個很小的 init 程式。
安裝 Emdebian Toolchain 。
再來參考 How to Cross Compile Arm Kernel under Ubuntu-10-10 。
這篇講如何編譯 Ubuntu,但是同樣的作法用在 Debian 不成功。末尾說明了如何編從 kernel.org 拿到的核心,到是可以用的。只是沒說明編了 uImage 後要如何和 u-boot 結合。
之後參考 Installing Debian On TI BeagleBone 。
這篇使用 linaro-image-tools 和 live-build,以及 qemubuilder 。
依照文中的方法建造 Debian binary rootfs 不成功。
之後再試建造 u-boot,但之前使用 qemubuilder 失敗過,得到以下訊息,
FATAL: kernel too old
據說是因 c 函式庫的新舊問題造成,我沒時間思考如何解決,因此先放棄。
建造 kernel 也使用 qemubuilder,因此放棄。
再來是 hwpack。這部份不熟,先擱置。
再參考 BeagleBone Debian Wheezy snapshot armhf based RootFileSystem 。
先取得 cross-compilers:
$ wget -c https:
//launchpad.net/linaro-toolchain-binaries/trunk/2013.07/+download/gcc-linaro-arm-linux-gnueabihf-4.8-2013.07-1_linux.tar.xz
$ tar xJf gcc-linaro-arm-linux-gnueabihf-
4.8
-
2013.07
-1_linux.tar.xz
$ export CC=`pwd`/gcc-linaro-arm-linux-gnueabihf-
4.8
-
2013.07
-1_linux/bin/arm-linux-gnueabihf-
確定是 32bit 版本:
$ {CC}gcc --version
取得最新版的 u-boot:
$ git clone git:
//git.denx.de/u-boot.git
$ cd u-boot/
$ git checkout v2013.
07
-b tmp
patch 後進行編譯:
$ wget -c https:
//raw.github.com/eewiki/u-boot-patches/master/v2013.07/0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
$ patch -p1 <
0001
-am335x_evm-uEnv.txt-bootz-n-fixes.patch
$ make ARCH=arm CROSS_COMPILE=${CC} distclean
$ make ARCH=arm CROSS_COMPILE=${CC} am335x_evm_config
$ make ARCH=arm CROSS_COMPILE=${CC}
接下來編譯 kernel,在此不使用作者提供的 git.sh, 因曾無法 git clone 或 fetch from kernel.org 而出問題。而且未來將針對特定的 branch 進行 patch。作法如下:
。不使用文中所用的 git.sh,因此先 clone 之後,修改 system.sh 中的 LINUX_GIT,並且將 scripts/git.sh 中所有從 kernel.org 取得 repository 的程式片段都放在註解中。之後就可以成功編譯。
可惜的是我在成功產生一個 3.2 的 MicroSD 後,以此 MicroSD boot linux,在 boot kernel 階段失敗。當掉的原因是因為我實際上產生的是 3.12 的 kernel 而非 3.2 的 kernel。在 linux-dev 中執行
git checkout origin/am33x-v3.
2
-b tmp
git checkout v3.2
後,成功。
再參考 Flashing Ubuntu 13-04 or debian wheezy to the beaglebone black emmc 。
沒有留言:
張貼留言