www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 公眾號精選 > 嵌入式大雜燴
[導讀]關注「嵌入式大雜燴」,選擇「星標公眾號」一起進步!01修改與編譯內(nèi)核前面小哥主要是跟大家講解了uboot的燒錄、使用等等,而對于嵌入式Linux環(huán)境而言其實主要是分為三大塊:uboot,LinuxKernel(內(nèi)核),文件系統(tǒng),當然高版本的內(nèi)核存在設備樹文件等等,不過感覺還不足以...

關注「嵌入式大雜燴」,選擇「星標公眾號」一起進步!


01

修改與編譯內(nèi)核

前面小哥主要是跟大家講解了uboot的燒錄、使用等等,而對于嵌入式Linux環(huán)境而言其實主要是分為三大塊 : uboot,Linux Kernel(內(nèi)核),文件系統(tǒng),當然高版本的內(nèi)核存在設備樹文件等等,不過感覺還不足以認為是一大塊,只能說是驅(qū)動的一部分。那么本文就主要是通過uboot把Linux系統(tǒng)運行起來,而掛載根文件系統(tǒng)并進入終端命令行估計得到下一篇文章了。如果大家手上有已經(jīng)移植或制作OK的Linux內(nèi)核image和文件系統(tǒng),只需要將他們燒錄到板子上的對應存儲位置上,然后設置uboot中的一些啟動參數(shù)即可完成整個Linux系統(tǒng)的啟動。然而每塊開發(fā)板的外設總會存在或多或少的差異,這樣就需要開發(fā)人員修改相應的與硬件交互的代碼(Linux驅(qū)動),或者調(diào)整各部分在內(nèi)存分布的大小與地址等,以適應新的硬件平臺,這個過程就叫做移植。看起來移植很高大上,相對Linux內(nèi)核這么龐大的代碼而言還是小部分,畢竟Linux系統(tǒng)在開發(fā)過程中都會考慮與硬件相關部分進行的分離,并且大部分開發(fā)板都會參考官方發(fā)布的單板來進行布局。好了,那么小哥就大致講解一下這個過程。02

移植與燒錄內(nèi)核

這里使用的是百問網(wǎng)科技超級老的jz2440開發(fā)板,他們提供了對應內(nèi)核版本的適配其開發(fā)板的移植補丁,也就是說在Linux-3.4.2原始的內(nèi)核源碼上通過提供的補丁包自動化的進行代碼的修改以適應當前開發(fā)板,從單片機的角度看來就是修改一些引腳,配置驅(qū)動等等。然而小哥手頭板子的NandFlash上存在壞塊,uboot,內(nèi)核、文件系統(tǒng)等都會燒錄到NandFlash上,你可以認為就是單片機的Flash,不過單片機的Flash大部分為NorFlash,而由于存在壞塊所以對相關的分區(qū)進行調(diào)整,否則壞塊會導致相應的燒錄文件不完整而啟動失敗。由于后面打算移植QT,而之前拿到的補丁包沒有移植好觸摸驅(qū)動和網(wǎng)卡驅(qū)動,即使打了之前拿到的補丁還需要繼續(xù)進行相關代碼上的移植,那慢慢來,先把一些適配的補丁打上:1tar?jxvf?linux-3.4.2.tar.bz2
2cd?linux-3.4.2/
3patch?-p1?<../linux-3.4.2_100ask.patch

Linux-3.4.2_100ask.patch就是百問網(wǎng)提供的補丁包,所謂的補丁包不是什么高級東西,就是通過patch命令根據(jù).patch文件的修改描述,直接添加和修改內(nèi)核中文件的內(nèi)容,與我們手動修改本質(zhì)上是一樣的。

不過它把所有的差異都整理成了一個文件,實現(xiàn)了一種一鍵修改源文件工程的目的,因為內(nèi)核源碼官方都可以獲取,而我們只需要一個補丁包就可以通過打補丁把官方源碼改成適配自己單板的源碼,美滋滋~

03

內(nèi)核分區(qū)修改

前面uboot也存在這樣的一個默認分區(qū)表kernel部分分了36M,同樣內(nèi)核中的默認分區(qū)表中的內(nèi)核區(qū)域也分配了36M。


很多人該問了為什么有兩個默認的分區(qū)表?

前面小哥講解了存儲地址與運行地址,Linux內(nèi)核中的相關操作都是基于Linux內(nèi)核中的分區(qū)表,比如uboot向Linux內(nèi)核的傳參中:

就是告訴內(nèi)核加載文件系統(tǒng)需要在MTD的第三個區(qū)分進行加載,那么uboot在進行文件系統(tǒng)燒錄的時候就需要把燒錄文件放到第三個分區(qū)地址區(qū)域,且與內(nèi)核中的分區(qū)地址一致,不然Linux內(nèi)核掛載文件失敗。其實對于uboot中的分區(qū),僅僅只是為了部署Linux環(huán)境而設置的,一旦啟動內(nèi)核了uboot的生命周期就結束了,比如之前我們在uboot中使用nand write 源地址 目的地址 長度,我們也可以直接簡化為對對應分區(qū)的操作:nand write 0x30000000 kernel。從上圖中uboot的環(huán)境變量bootcmd中使用的kernel,也是類似的使用方法。那為什么要把Linux內(nèi)核分區(qū)設置36M呢?其實我當前編譯的Linux內(nèi)核映像也才幾M的大小,主要是Linux內(nèi)核中這種分區(qū)方式是連續(xù)的,前一個區(qū)的結束地址是后一個分區(qū)的起始地址,然而經(jīng)過小哥測試,剛好文件系統(tǒng)分區(qū)前面一部分NandFlash存在壞塊,這樣會導致文件系統(tǒng)不完整,后期掛載會失敗,所以這樣通過加載內(nèi)核分區(qū)以使得文件系統(tǒng)分區(qū)地址后移的方式來規(guī)避掉這些壞塊,同時對于內(nèi)核部分由于其燒錄文件不大,有效文件不會燒錄到壞塊部分,算是一個捷徑。03

網(wǎng)卡驅(qū)動修改

uboot雖然可以進行TFTP網(wǎng)絡服務,但是并不意味著Linux內(nèi)核也可以正常使用,他們兩個驅(qū)動是分開的,一旦uboot成功啟動內(nèi)核以后uboot的生命周期就結束了。Linux內(nèi)核也必須擁有正確的網(wǎng)卡驅(qū)動才能夠使用相應的網(wǎng)絡服務,其實這跟我們windows系統(tǒng)是一樣的,當我們電腦沒有相應的驅(qū)動,相應的硬件也是無法使用的,比如最好用的網(wǎng)絡文件系統(tǒng)NFS。

由于我們使用的是dm9000網(wǎng)卡,且mini2440單板已經(jīng)得到很好的支持,所以我們參考直接移植過來即可,主要是填充相應的平臺設備結構體以描述dm9000網(wǎng)卡資源并注冊與驅(qū)動匹配。

首先要包含dm9000網(wǎng)卡的頭文件,以便使用到其頭文件中的宏定義或者數(shù)據(jù),然后使用resource結構體描述dm9000網(wǎng)卡的一些資源,包括IO資源和中斷資源,并且使用平臺設備platformdevice來描述dm9000網(wǎng)卡,以便后續(xù)總線上device與driver匹配在,這樣也就實現(xiàn)了設備與驅(qū)動的分離。

最后把平臺設備作為smdk2440眾多設備初始化中的一員加入到initdata中,以便系統(tǒng)啟動的時候便加載設備和匹配驅(qū)動。

有了以上移植,基本上單板的網(wǎng)卡驅(qū)動就搞定了,相應的網(wǎng)絡相關的服務就可以使用了,不像單片機那樣你還要直接移植相應的網(wǎng)絡協(xié)議棧等等,一旦搞定了驅(qū)動,基本上跟windows系統(tǒng)上面開發(fā)應用程序大同小異~

04

LCD驅(qū)動程序修改

對于LCD的支持其實與前面網(wǎng)卡驅(qū)動修改其實是類似的,還是采用Linux設備與驅(qū)動分開的思想,基本上驅(qū)動部分不用太多修改,僅僅只需要把驅(qū)動部分根據(jù)Linux提供的框架進行相應的描述填充即可,說得直白一點就是填充再賦值結構體,你可以認為這些都是固定的套路吧~這里小哥使用的是4.3寸的屏幕,所以進行如下填充與配置:

同樣因為2440是自帶LCD控制器的,唯一要做的就是把LCD控制這塊以及LCD屏幕的屬性描述清楚,如上面各個結構體設置所選擇LCD的相關屬性,比如尺寸,刷新時序等等,最后把整個結構體填充好并注冊。同時記得確認一下menconfig里面是否已經(jīng)選擇了LCD_FB,并選擇編譯到Linux內(nèi)核,執(zhí)行命令:
1make?menuconfig?CROSS_COMPILE=/home/book/WorkSpace/Qt/src/arm-linux-gcc-4.4.3/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-?ARCH=arm?-j8

1Device?Drivers??--->?
2??Graphics?support??--->?
3????Support?for?frame?buffer?devices??--->?
4??????S3C2410?LCD?framebuffer?support??

配置好以后,記得save到對應的.config即可,這樣編譯前的配置才能夠生效。

05

觸摸驅(qū)動編譯與移植

玩單片機的小伙伴都知道電阻觸摸屏,就是通過獲得屏幕橫縱的AD采樣值最終來定位屏幕上的位置,而S3C2440也是存在觸摸屏的外設接口的,我們通過配置觸摸屏外設接口,即可驅(qū)動觸摸屏獲得相應的ADC值最終定位到屏幕上所點擊的位置。

在Linux中對于鼠標、觸摸等等都屬于輸入設備,所以這類驅(qū)動都可以歸為輸入子系統(tǒng)input,那么我們只需要注冊一個輸入子系統(tǒng)即完成了觸摸屏驅(qū)動。

觸摸驅(qū)動程序主要分為這樣幾步,首先獲得一個輸入設備結構體,然后根據(jù)觸摸的特性進行相關的事件的配置,因為輸入系統(tǒng)都是以事件的方式上報給系統(tǒng),不同的事件當然配置也就不同,配置好了以后就把輸入設備結構體注冊到系統(tǒng),以便設備識別。而當所配置的事件一旦條件觸發(fā),就會把觸發(fā)信號和數(shù)據(jù)通過input_report上報給系統(tǒng),供系統(tǒng)使用,所以單片機你想做得通用化,也可以直接這么玩,不過考慮到單片機的簡潔,還是慎重考慮~雖然我們可以直接把該驅(qū)動程序編譯成.ko驅(qū)動程序,可是這樣需要每次內(nèi)核啟動完成以后就需要重新加載驅(qū)動,有點麻煩,所以考慮把它編譯到Linux內(nèi)核中。要把驅(qū)動程序添加到內(nèi)核需要做三件事:1)添加源碼到相應目錄;2)在相應的Kconfig文件中增加編譯選項;3)在makefile中增加相應的編譯項。前面我們大致編寫了源碼并且放到了相應的目錄,這里就只需要完成后面的兩項,這兩項可能相應的語法規(guī)則剛開始并不是很熟,不過可以查閱相應的知識補充,也可以直接照著其他touch驅(qū)動類似編寫即可。
比如s3c2410的Kconfig如下編寫:于是我們可以模仿著把S3C2440類似的添加到后面:


第二步完成,接下來在當前目錄的Makefile添加編譯項目:


照著S3C2410的來即可。雖然我們完成上面的三步,但只是完成了能夠提供選擇的是否編譯進內(nèi)核的驅(qū)動選項,在menuconfig菜單中你可以看到,而到底最終是否編譯到內(nèi)核,還需要在menconfig菜單中進行配置選擇并保存到config中。1Device?Drivers??--->?
2??Input?device?support??--->??
3????Touchscreens??--->

至此,觸摸的驅(qū)動就編寫并添加到了內(nèi)核中。06

內(nèi)核的編譯與燒錄

一切準備就緒,那就是編譯內(nèi)核了,編譯內(nèi)核的目的就是為了獲得Linux kernel映像文件,最終燒錄到板子上的內(nèi)容。如下是我使用的編譯命令,由于沒有把相應的路徑放到環(huán)境變量,所以這里就制定了編譯器路徑,比較長。1make?uImage?CROSS_COMPILE=/home/book/WorkSpace/Qt/src/arm-linux-gcc-4.4.3/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-?ARCH=arm?-j8

如果編譯過程中遇到什么不理解的error,基本上都是根據(jù)所報錯誤的提示,進行網(wǎng)絡查找,一般都可以得到解決,因為大家都遇到過~最后順利編譯內(nèi)核成功,如下是編譯結果:以上的輸出信息,我們也可以了解到想要的uImage所在路徑,以及文件的大小,類型和入口地址等。


我們借助uboot直接通過TFTP服務把uImage先下載到SDRAM中,然后在使用NandFlash命令燒錄到Flash中對應的分區(qū)即可。其實燒錄過程在往期的uboot中已經(jīng)說得很詳細了,這里主要提兩點:1)由于uboot是一個單任務的裸機程序,所以連接好網(wǎng)線以后,你的電腦網(wǎng)絡狀態(tài)還是沒有連接的,所以需要uboot主動發(fā)起網(wǎng)絡,電腦端就會有網(wǎng)絡鏈接狀態(tài)顯示了。


2)在進行網(wǎng)絡通信過程中,要記得關掉電腦主機的防火墻,以便鏈接失敗。我們使用TFTP服務,需要設置好服務器IP,也就是我們的電腦主機IP地址,然后通過TFTP命令獲得相應的內(nèi)核文件,實驗結果如下:
這樣我們就把uimage下載到了SDRAM的0x30000000的位置,接下來我們需要把他燒錄到對應的NandFlash的Kernel分區(qū)上,使用如下命令:

1nand?erase.part?kernel
2nand?write?0x30000000?kernel

重新啟動開發(fā)板,即可看到成功啟動了內(nèi)核:但是最終由于我們還沒有為Linux系統(tǒng)構建文件系統(tǒng),系統(tǒng)啟動還需要一些必備的啟動文件和工具,最終會報錯。



不過我們今天的目標達到,Linux內(nèi)核得到了啟動,并且移植好了我們想要的一些驅(qū)動。

最? 后?


這里小哥就介紹了一下Linux內(nèi)核的移植、燒錄、相關驅(qū)動的相關知識,希望本文能夠?qū)δ阌袔椭缕趲砦募到y(tǒng)的構建過程~

往期干貨:

往期推薦



嵌入式項目生成器,了解一下!

一個清晰的LCD驅(qū)動編寫思路(附代碼分析)

RT-Thread和Freertos的區(qū)別?

程序如何運行?編譯、鏈接、裝入?


本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉