嵌入式linux镜像,使用Openembedded定制嵌入式Linux镜像
關(guān)鍵詞:ARM,Linux,Openembedded
作者:ByToradex秦海
摘要:嵌入式設(shè)備采用Embedded Linux操作系統(tǒng)進(jìn)行開發(fā)已經(jīng)越來越成為主流,但是如何將開發(fā)完成的Linux uboot/kernel配置,以及應(yīng)用程序整合到Embedded Linux鏡像中以便在量產(chǎn)的時(shí)候更方便的更新到嵌入式設(shè)備中可能是很多嵌入式開發(fā)者面臨的挑戰(zhàn)之一,而本文就以在Embedded Linux中使用比較廣泛的Yocto project 為例,基于Openembedded開發(fā)框架定制 Embedded Linux鏡像。
1).?簡介
嵌入式設(shè)備采用Embedded Linux操作系統(tǒng)進(jìn)行開發(fā)已經(jīng)越來越成為主流,但是如何將開發(fā)完成的Linux uboot/kernel配置,以及應(yīng)用程序整合到EmbeddedLinux鏡像中以便在量產(chǎn)的時(shí)候更方便的更新到嵌入式設(shè)備中可能是很多嵌入式開發(fā)者面臨的挑戰(zhàn)之一,而本文就以在Embedded Linux中使用比較廣泛的Yocto project為例,基于Openembedded開發(fā)框架定制?Embedded Linux鏡像。
本文所演示的平臺(tái)來自于Toradex Colibri iMX6嵌入式平臺(tái),這個(gè)平臺(tái)是基于NXP iMX6系列ARM處理器,核心為Cortex-A9。同時(shí)Toradex也提供了一個(gè)完整的Ycoto project兼容的基于Openembedded發(fā)布的Embedded Linux,這樣就無需完全從頭開始配置自己的layer,只需要修改添加需要的部分即可。
2).?準(zhǔn)備
a).?ColibriiMX6 ARM核心版配合ColibriEva Board?載板,用于測(cè)試編譯好的image。
b).?配置Openembedded開發(fā)環(huán)境,請(qǐng)參考這里說明,本文測(cè)試使用LinuxImage2.7分支環(huán)境。
c).?參考這里說明下載Linux V2.7內(nèi)核和uboot源代碼,用于產(chǎn)生相應(yīng)的patch文件。
c).?本文演示的定制Embedded Linux鏡像主要添加修改以下內(nèi)容,下面會(huì)按照這個(gè)內(nèi)容逐一說明:
./?修改uboot默認(rèn)環(huán)境變量,適配演示使用的?LVDS?液晶屏
./?修改Linux Kernel增加一個(gè)設(shè)備驅(qū)動(dòng);同時(shí)修改Linux device tree文件,增加兩個(gè)串口配置
./?將演示Qt應(yīng)用程序集成到image,并配置為開機(jī)自動(dòng)啟動(dòng)
3).?創(chuàng)建定制Embedded Linux?相關(guān)配置Layer
a).?在配置下載好的OpenEmbedded環(huán)境Layer目錄下,創(chuàng)建存放本次定制image相關(guān)文件資料的Layer – meta-toradex-custom.
b).?在meta-toradex-custom目錄下創(chuàng)建?conf?目錄,并創(chuàng)建Layer配置文件?layer.conf?,這個(gè)文件內(nèi)容可以參考meta-toradex-nxp/conf/layer.conf?文件進(jìn)行修改,主要是layer名字和優(yōu)先級(jí)以及依賴部分需要注意,修改好的文件請(qǐng)見如下:
https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/conf/layer.conf
c).?在?conf?目錄下創(chuàng)建?machine?目錄,并創(chuàng)建?machine?配置文件?colibri-imx6-custom.conf ,?文件內(nèi)容同樣參考meta-toradex-nxp/conf/machine/colibri-imx6.conf?修改,本文因沒有修改devicetree名字,因此沒有修改次文件,內(nèi)容如下:
https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/conf/machine/colibri-imx6-custom.conf
4). OpenEmbedded下Uboot修改示例
a).?因?yàn)檠菔臼褂玫腖VDS液晶屏分辨率為1024x768,這里將uboot顯示環(huán)境變量默認(rèn)值修改為對(duì)應(yīng)分辨率
b).?首先進(jìn)入下載的uboot源代碼對(duì)?include/configs/colibri_imx6.h?文件進(jìn)行修改,產(chǎn)生的patch文件如下:
https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/recipes-bsp/u-boot/files/colibri_imx6_uboot_custom.patch
c).?在?meta-toradex-customlayer目錄下創(chuàng)建?recipes-bsp/u-boot目錄,并對(duì)?u-boot-toradex_2016.11.bb?文件進(jìn)行append,增加上面生成的patch內(nèi)容,如下:
https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/recipes-bsp/u-boot/u-boot-toradex_2016.11.bbappend
5). OpenEmbedded下Linux kernel?和?device tree?修改示例
a).?對(duì)Linux kernel進(jìn)行重新config,增加了如下RTL8152 USBEthernet Adapter驅(qū)動(dòng)
--------------------------------
→?Device Drivers?→?Network device support?→?USB NetworkAdapters
? Realtek RTL8152/RTL8153 Based USBEthernet Adapters
--------------------------------
生成的新的defconfig文件如下:
https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/recipes-kernel/linux/files/defconfig
b).?對(duì)?arch/arm/boot/dts/imx6dl-colibri-eval-v3.dts文件進(jìn)行修改,增加UART4?和?UART5?連個(gè)串口支持,關(guān)于Colibri iMX6串口詳細(xì)說明請(qǐng)參考這里,修改后的?patch?文件0001-custom-devicetree.patch?請(qǐng)見如下:
https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/recipes-kernel/linux/files/0001-custom-devicetree.patch
c).?在?meta-toradex-customlayer目錄下創(chuàng)建?recipes-kernel/linux目錄,并對(duì)?linux-toradex_4.1-2.0.x.bb?文件進(jìn)行append,將上面生成的?defconfig?和?0001-custom-devicetree.patch增加進(jìn)去,如下:
https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/recipes-kernel/linux/linux-toradex_4.1-2.0.x.bbappend
然后再創(chuàng)建?files?目錄,將defconfig?和?0001-custom-devicetree.patch?兩個(gè)文件復(fù)制進(jìn)去。
另外,關(guān)于如何生成kernel patch,也可以參考下面文章:
https://www.toradex.cn/blog/patching-kernel-in-openembedded
6). OpenEmbedded下部署Qt應(yīng)用示例
a).?本文所使用的Qt?應(yīng)用demo說明請(qǐng)參考下面文章:
http://blog.sina.com.cn/s/blog_d733e5170102wyay.html
b).?配置Qt開機(jī)自啟動(dòng)需要下面兩個(gè)文件
./ Qt?程序執(zhí)行腳本,這里使用linuxfb進(jìn)行顯示
https://github.com/simonqin09/QtGPIOProject/blob/master/qtdemo.sh
./ Systemd?啟動(dòng)配置?.service文件
https://github.com/simonqin09/QtGPIOProject/blob/master/qtdemo_launch.service
c).?在?meta-toradex-customlayer目錄下創(chuàng)建?recipes-qt/qtdemo目錄,并創(chuàng)建如下?qtdemo_0.1.bb?文件用于從Qt?應(yīng)用的git地址下載應(yīng)用并編譯部署
https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/recipes-qt/qtdemo/qtdemo_0.1.bb
關(guān)于這個(gè)bb文件的詳細(xì)說明,可以參考下面文檔:
https://www.toradex.cn/blog/building-custom-embedded-linux-distributions
7). OpenEmbedded下設(shè)置自定義image鏡像編譯
a).?在?meta-toradex-customlayer目錄下創(chuàng)建?recipes-images/images目錄,將下面三個(gè)文件從?meta-toradex-demos/recipes-images/images?復(fù)制過來
--------------------------------
angstrom-qt5-x11-image.bb
tdx-extra.inc
tdx-image-fstype.inc
--------------------------------
Angstrom-qt5-x11-image.bb?文件就是生成image的bb文件,可以不做修改,也可以根據(jù)需要添加修改package設(shè)定,本文修改了angstrom-qt5-x11-image.bb文件,將默認(rèn)需要編譯的Qt demo smarthome?程序去掉了,如下:
https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/recipes-images/images/angstrom-qt5-x11-image.bb
b).?在images目錄下繼續(xù)創(chuàng)建?files/colibri-imx6-custom?目錄,將?u pdate.sh?文件從?meta-toradex-demos/recipes-images/images/files/colibri-imx6?復(fù)制過來。然后因?yàn)?machine?名字變?yōu)閏olibri-imx6-custom?了,因此要對(duì)應(yīng)修改,修改內(nèi)容如這里:
https://github.com/simonqin09/openembedded_demo/blob/master/meta-toradex-custom/recipes-images/images/update.sh.patch
c).?在colibri-imx6-custom目錄下繼續(xù)創(chuàng)建?imx_flash?目錄,將?meta-toradex-demos/recipes-images/images/files/colibri-imx6/files/imx_flash目錄下的文件復(fù)制過來。
d).?在colibri-imx6-custom目錄下繼續(xù)創(chuàng)建?colibri-imx6-custom_bin?目錄,將meta-toradex-demos/recipes-images/images/files/colibri-imx6/files/colibri-imx6_bin目錄下的所有文件復(fù)制過來。
e).?至此,meta-toradex-customlayer?的所有修改都已經(jīng)完成,下面我們進(jìn)入?OpenEmbedded編譯環(huán)境下?build/conf?目錄,?對(duì)下面兩個(gè)文件進(jìn)行修改:
./ bblayers.conf –?增加了meta-toradex-custom layer進(jìn)來,如下:
https://github.com/simonqin09/openembedded_demo/blob/master/bblayers.conf
./ local.conf –?將默認(rèn)的machine?修改為colibri-imx6-custom,?同時(shí)增加了一些包如?tslib?和?linuxfb,如下:
https://github.com/simonqin09/openembedded_demo/blob/master/local.conf
f).?在?build目錄下執(zhí)行下面命令進(jìn)行編譯,編譯成功后,可以在deploy/images/colibri-imx6-custom?目錄下找到編譯好的?image?壓縮包。
--------------------------------
$ bitbake –k angstrom-qt5-x11-image
--------------------------------
8).?在Colibri imx6模塊上面更新image并測(cè)試
a).?將上述生成好的image文件colibri-imx6-custom_Qt5-X11-Image_2.7b3-xxxxxxxx.tar.bz2?按照這里的說明更新到?Colibri iMX6?模塊上面去。
b). QT GPIO?應(yīng)用使用的管腳為SODIMM PIN 127,這里在?Colibri Evaluation Board?上面將?X10 SODIMM 127?和?X21 LED1?相連,用于測(cè)試GPIO電平情況。
c). image?更新好后,我們可以逐項(xiàng)去測(cè)試上面每一個(gè)配置
./ uboot
如下可見默認(rèn)環(huán)境變量的修改已經(jīng)生效
--------------------------------
# env default –a
# printenv
…
vidargs=video=mxcfb0:dev=lcd,1024x768M@60,if=RGB666video=mxcfb1:off fbmem=8M
…
--------------------------------
./ kernel config?修改
如下可見kernel增加的驅(qū)動(dòng)也已經(jīng)編譯進(jìn)去了
--------------------------------
root@colibri-imx6-custom:~# zcat/proc/config.gz |grep RTL8152
CONFIG_USB_RTL8152=y
--------------------------------
./ device tree?修改
如下可見,除了默認(rèn)的ttymxc0-2設(shè)備,還多了ttymxc3和ttymxc4
--------------------------------
root@colibri-imx6-custom:~# ls/dev/ttymxc*
/dev/ttymxc0 ?/dev/ttymxc1 ?/dev/ttymxc2 ?/dev/ttymxc3 ?/dev/ttymxc4
--------------------------------
./ Qt?程序自啟動(dòng)以及控制GPIO情況
如下圖片
還有一起啟動(dòng)過程的視頻如下:
http://v.youku.com/v_show/id_XMzE3MDY4NDkyNA==.html
9).?總結(jié)
本文只是簡單演示了利用?OpenEmbedded?可以非常方便的生成定制化?Embedded Linux,另外配合git,還可以很好的實(shí)現(xiàn)不同版本的管理。但是?OpenEmbedded?架構(gòu)本身也是比較復(fù)雜的,要想靈活使用還需要對(duì)其做一些深入的學(xué)習(xí)才能得心應(yīng)手。
總結(jié)
以上是生活随笔為你收集整理的嵌入式linux镜像,使用Openembedded定制嵌入式Linux镜像的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言建立动态链表ppt,C语言链表讲解
- 下一篇: python能做什么效果_python对