本文轉(zhuǎn)自:http://blog.csdn.net/fei534358549/article/details/50284277
作者:Keith-Yang
上一節(jié)中已經(jīng)講述了如何去構(gòu)建編譯環(huán)境贷洲,這一節(jié)講一下如何定制專屬于自己板卡的系統(tǒng)声功。
1. 配置linux內(nèi)核
官方repo下來(lái)的yocto項(xiàng)目里配置了多個(gè)內(nèi)核可選,我們可以在yocto目錄下/source/meta-fsl-arm/recipes-kernel/linux 中找到康栈,配置的三個(gè)內(nèi)核如下:
linux-fslc_3.8.bb--> kernel mainline (from kernel.org)
linux-imx_2.6.35.3.bb--> kernel from FSL, for imx5x and imx28
linux-imx_3.0.35.bb--> kernel from FSL for imx6
我的板子是imx6的村怪,因此我選的是linux-imx6析藕,如果你用的是高版本的yocto慷垮,那內(nèi)核可能跟我的不一樣,不過(guò)配置沒(méi)有什么大的變化句灌。
內(nèi)核的arch/arm/configs目錄下有一些默認(rèn)的配置可選夷陋,yocto也有自己的配置可用欠拾,現(xiàn)在講一下自定義配置內(nèi)核。
//首先創(chuàng)建一個(gè)配置xxxx_defconfig
$ cp xxx_defconfig?meta-fsl-arm/recipes-kernel/linux/linux-imx-3.0.35/mx6 ? //這里要對(duì)應(yīng)你yocto版本的目錄
$ bitbake -c cleansstate linux-imx//清理一下之前編譯的狀態(tài)
$ bitbake linux-imx//編譯內(nèi)核
$ bitbake fsl-image-gui //編譯整個(gè)工程骗绕,不是必須的
2. 使用menuconfig配置具體項(xiàng)
$ bitbake -c menuconfig linux-imx
$ cp tmp/work/imx6qsabresd-poky-linux-gnueabi/linux-imx/3.0.35-r33.10/Git/.config ../sources/meta-fsl-arm/recipes-kernel/linux/linux-imx-3.0.35/mx6/defconfig
$ bitbake -c cleansstate linux-imx
$ bitbake fsl-image-gui
3. 如果想用linux主線版本的最新內(nèi)核藐窄,可以通過(guò)改配置conf/local.conf,不一定支持酬土,而且有危險(xiǎn)(主要是BUG沒(méi)人測(cè)試)
PREFERRED_PROVIDER_virtual/kernel = "linux-fslc"
4. 用yocto不太適合開(kāi)發(fā)(主要是腳本啥的太智能荆忍,找半天麻煩),此時(shí)我們編譯的工具鏈就有作用了撤缴。當(dāng)執(zhí)行完bitbake meta-toolchain后
工具鏈就生成腳本了刹枉,看下面:
$ ls tmp/deploy/sdk/poky-eglibc-x86_64-arm-toolchain-1.4.1.sh
tmp/deploy/sdk/poky-eglibc-x86_64-arm-toolchain-1.4.1.sh ? ? //前提你編譯沒(méi)出錯(cuò),版本不一定跟我的一樣
現(xiàn)在安裝一下:
$ source poky-eglibc-x86_64-arm-toolchain-1.4.1.sh
[sudo] password for daiane:
Enter target directory for SDK (default: /opt/poky/1.4.1):
You are about to install the SDK to "/opt/poky/1.4.1". Proceed[Y/n]?y
Extracting SDK...done
Setting it up...done
SDK has been successfully set up and is ready to be used.
測(cè)試一下腹泌,隨便寫(xiě)一個(gè)helloworld程序:
$ arm-poky-linux-gnueabi-gcc helloworld.c -o hello
$ ls
hello? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?helloworld.c
$ ./hello
-bash: ./hello: cannot execute binary file//肯定報(bào)錯(cuò)
$ file hello
hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped
5. 用導(dǎo)出的工具鏈編譯導(dǎo)出的內(nèi)核
$ source /opt/poky/1.4.1/environment-setup-armv7a-vfp-neon-poky-linux-gnueabi//導(dǎo)出環(huán)境變量嘶卧,也可以寫(xiě)入/etc/bash.bashrc文件
$ cd linux-imx
$ export ARCH=arm
$ export CROSS_COMPILE=$TARGET_PREFIX
$ unset LDFLAGS
$ make imx6_defconfig
$ make uImage//也可以使用zImage尔觉,路徑在/arch/arm/boot目錄下
6. 編譯busybox凉袱,制作文件系統(tǒng)
$ source /opt/poky/1.4.1/environment-setup-armv7a-vfp-neon-poky-linux-gnueabi//導(dǎo)出環(huán)境變量,也可以寫(xiě)入/etc/bash.bashrc文件
$ cd busybox1.2//busybox我是從官網(wǎng)下載的侦铜,版本自己決定
$ export ARCH=arm
$ export CROSS_COMPILE=$TARGET_PREFIX
$ unset LDFLAGS
$ make menuconfig//定義自己需要的命令专甩,不懂的請(qǐng)參考busybox配置
$ make&&make install
7. 將制作好的內(nèi)核與文件系統(tǒng)通過(guò)網(wǎng)口或者U盤(pán)測(cè)試一下是否可用。