




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、FrameBuffer驅動設計文檔內核版本文檔設計: 侯輝華版 本: 1.01時 間: 2007/03/10文檔簡介:本文描述了如何完成framebuffer驅動的過程,并詳細介紹了整個完成過程中所遇到的的一些基礎問題及相應解決辦法,內容安排順序依據(jù)整個工作的進展來。1. 開始應該注意linux的基礎.當時初步分析LINUX時, 沒有安裝LINUX系統(tǒng),以立宇泰的LINUX開發(fā)包為基礎,怎么搞也沒能在CYGWIN下編譯成功, 當時對于LINUX的配制以及編譯過程都沒有任何了解, 遇到錯誤提示不知原因, 在MAKE DEP出現(xiàn)錯誤,亦不知原因是什么要知道,LINUX的配制如果不正確,make d
2、ep以及后面的make zImage的問題那是千奇百怪的,不一而足,不同環(huán)境根本說不清楚.所以要能自己獨立的解決問題,還必須對于配置以及make dep等等過程有一個大至的理解才行,這樣有問題才可能進行分析.2. 文檔主要內容.以下簡單的記錄一下近段時間在LINUX上基礎方面一些介紹. 其實僅對初學者有幫助, 因為初學者根本很多基本的東西都不知道,但是這些不知道的東西在網上基本沒有全面的介紹,僅僅可以在不同的文章當中,可能會只言片語的順便帶出, 因此在這里我僅以自己初學的過程做一記錄, 希望大家可以分享我的苦與樂, 不要象我一樣再痛苦一次.有點后悔沒有當天記錄, 以至于丟失了最原始的茫然與無助
3、的感覺.追憶莫及.我雖然有了幾年的編程和學習經驗, 也看過不少的嵌入式的系統(tǒng)軟件, 代碼規(guī)模也不小,對GUI方面也有很多深入的學習與了解, 但是對于LINUX, 水平是比較次的, 以前工作的時候雖然著力分析過GDB的源碼, 但是感覺也是太龐大的, 不過還好能把握主體的結構, 也基本完成了移值, 之后就放下了, 對于LINUX也就是這種層次.近時時間由于要弄一個顯卡的FRAMEBUFFER驅動, 所以又不得不從零開始分析LINUX的相關東西, 遇到的問題很多, 所以希望記錄下來, 可以用幫助初學者. 基本上同cirrus logic公司提供的無異, 周邊的相關驅動都已經完成了, 但是因為要外括一
4、個顯卡上去, 所以要做的工作就是在這個開發(fā)包的基礎上增加顯卡的framebuffer驅動, 這個開發(fā)包在網上有下載, 他準備的很齊全, 基本上所有的包都有了, 而且建立了一個很方便的編譯環(huán)境, 將很多東西捆在一起. 通過簡單幾個命令就可以完成工作:如:make linuxconfigmake linuxmake ramdisk.gz以上三個命令就完成LINUX配置,編譯內核zImage, 生成虛擬盤ramdisk.gz, 如此非常方便.如何開始接觸Linux, 要大體了解些什么?1. 分析了LINUX在ARM這方面的代碼, 要看這部分還必須先搞清一些ARM的平臺知識以及匯
5、編知識.2. 熟悉了MAKEFILE文件規(guī)則.3. 熟悉LD鏈接器的LDS鏈接文件規(guī)則.4. LINUX的啟動加載部分, 可以支持由其它的BOOTLOADER來加載, 也可以自己加載, 這當中涉及到比較讓人不太清楚的地方就是:1) 要理清運行時的順序, 內核是壓縮過的, 起先壓縮過的的內核運行, 解壓出完整的內核, 然后轉去解壓后的完整內核運行.2) 要理清楚壓縮過的內核的組成部分, 分別由head.S這個啟動部分, misc.c解壓部分, LINUX內核壓縮文件piggy.o文件. 這幾部分鏈接在一起組合輸出名為linux的內核. piggy.o這個內核壓縮文件是由archarmbootco
6、mpressedMakefile這個makefile當中產生的. 產生他依賴完整的帶所有符號信息的LINUX內核的ELF格式的文件, , 由此逐層調用各個其它模塊內的Makefile, 模塊的劃分基本依據(jù)文件夾層次結構.3) 要理清各個部分在內存中的位置關系, 一是壓縮過的內核在什么地方, 二是解壓后的內核在什么地方, 三是解壓后的內核是否須要重定位而搬到其它地方.要特別注意有些LDS鏈接文件是鏈接后生成的, 看時間就可以知道, 它的作用就是告訴你內核鏈接后的位置, 因為先前的LDS文件中是一些符號.4) 搞清楚解壓后的內核包含哪些部分, 先前我們談到壓縮過的內核的組成部分, 說到包含了壓縮過
7、后的piggy.o, 這個才是真正的純內核,不包含archarmbootcompressedhead.s, archarmbootcompressedmisc.c這些解壓縮代碼,archarmkernelhead-armv.S的代碼才是解壓縮后的真正起始.5) 以上所有所講的, 內核的組成部分必須從makefile中分析, 然后再分析各個目錄下的lds連接文件, 理清了這兩部分才能正確理解以上所說的幾條. 才能搞清楚整個內核的配置, 包括處理器類型, 硬件板子類型等.4月17日有關LINUX發(fā)行版的安裝在linux面前,我是非常淺薄的,而且我以至于我開要裝什么樣的發(fā)行版,有什么最新發(fā)行版可裝,
8、都是不太清楚的,只是簡單的停留在學校階段時的Red Hat 7.0/Tubro Linux/Blue Point/Red Flag等這些, 對于如今的Flodra/Deabin等等,都不知道的, 所以還只能借助網絡來查找, 所幸有找到一個好網站,人氣也很旺,也積累了好多的的資料,耐心查看就是了.-LINUX各種方面資料網站,雖然編程方面的顯得少了,但是各種發(fā)行版安裝使用方面的問題,以及文檔介紹等等,都是非常好的,簡單的說:1.如果遇到GRUB出問題了,如在LINUX上又裝了XP,找不回LINUX啟動菜單了,你可以找它; 2.如果遇到不知道如何安裝TFTP服務,不知道如何配置或者關閉防火墻什么的
9、,你可以找它;3.如果想知道各種發(fā)行版的介紹以及安裝相關知識,你可以找它.一.查找LINUX的發(fā)行版,安裝LINUX.經過一番的查找, 終于了解了Fodara 5是一個比較好的穩(wěn)定版本(這個穩(wěn)定害死我了,后面講), 但是不知道安裝源在哪里, 也不知道哪里比較快, 所以還是先去下載了Red Hat 9.0這個非常這老的東西,應該是2003年的時候的吧, Fodara系統(tǒng)是RED HAT面對開源社區(qū)的版本, 后面RED HAT發(fā)行了企業(yè)版是收費的, RED HAT9.0因為先前就已經找到過一個下載源, 所以花了一點時間, 就找到了下載網址, 這是一個FTP.Red Hat 9.0下載FTP:好不容
10、易把RED HAT三張盤下載下來了, 加起來也有2G多吧,開著機品, 用FlashFXP開著機器下,好在是晚上睡覺的時候,第二天一大早起來可以看到下載完成,大喜哦.不過這個FlashFXP不太好,速度不行而且經常在下載過程中彈出是不是要覆蓋原來已有的文件,這是在下載半路中彈出來的,很郁悶.最好大家可以用自己的更好的FTP工具.可是后面一想,RED HAT比較老了,我的機器很新,估計到時候安裝可以硬件驅動是個麻煩事,不如找個新的發(fā)行版,這樣安裝之后可能會省心很多, 事實證明確是如此,后面就知道了.最新的Fodara 5有五張安裝碟,一張修復碟;如果是DVD就只有一張碟,總體的大小是4G左右.我是
11、在官方安裝源下載的, 使用的是BT下載,用FLASHGET1.8正好支持,免了到處找BT下載工具,這很煩.感謝FLASHGET這個這么好的工具,一直以來都在發(fā)展,感謝.Fodara 5下載源:Fedora Core 5 Final - Bordeauxbordeaux-binary-i386.torrent Fedora Core 5 Final - Bordeaux binary CD iso images for i386. 3.1GB 2006-03-20 開著機器DOWN整晚,多半都沒有問題,可以下載過錯成,呵呵,不要心疼愛機.Debian 4.0發(fā)行版的安裝源:下載了Debian 4
12、.0發(fā)行版的DVD碟,總共是3張, 大小有14G左右, 如果是CD的話據(jù)說是21張, 我是DOWN了整天才DOWN下來的, 但是郁悶的是,DOWN下來我記錄到DVD時, 因為是用另外一臺機子下載的, 所以直接用網絡記錄, 因為選的刻速過高, 是16X, 所以居然在第二張時刻壞了一張盤, 郁悶,最后都用6X的最低速記錄, 才算平安無事.Debain 4.0 發(fā)行版的BT下載種子:我用的官網的, 一來穩(wěn)定, 二來也好找, 三來速度也不錯, 平均都有50K左右吧,種子如下:4月27日WINXP與LINUX FC5雙系統(tǒng)的共存想著LINUX總是不太便,最慘是不能用IS來閱讀代碼,所以很郁悶,于是想再裝
13、一個WINXP,于是悲擾又著來了:現(xiàn)在WINXP總算可以正常的使用了, 不會再上不了網,也沒有中什么毒,心想可以安靜一段時日了, 但是想起LINUX FC5, 還得把它找回來呀,不然就白裝了,于是到: 一番查找,終于找到,可是執(zhí)行過后,WINXP的菜單項一選擇就進了LINUX去了,當時郁悶了好半天,還以為是自己的一個誤操作才導致如此:root (hd0, 5) /執(zhí)行這個前我執(zhí)行了一次root (hd0, 0), 開珆以為這里錯,事后表面與此無關.setup (hd0, 0)至于正確的解決辦法,那是好多天后才偶然嘗試成功的,就這么一個小問題,也把我搞死,僅須改setp (hd0, 0)為set
14、up (hd0), 就可以正常在GRUB上啟動WINXP了2. 正式開始使用linux FC5, 遇到不少好資料.這些資料當中,特別值得介紹一下的就是那本介紹如何自己編譯一個最小型的LINUX操作系統(tǒng)環(huán)境的書, 而不用從發(fā)行版安裝,它一步一步教我們如保建立編譯工具鏈,以及如何建立內核,如何建立啟動環(huán)境與腳本,讓我們可以明白LINUX整個系統(tǒng)的組成,簡稱LFS:Linux From Scratch版本以上講解了最基本的一個LINUX環(huán)境的建立過程, 后緒的別一本書接著介紹了如何建立整個GUI圖形界面以有一些更加多的網絡服務等:Beyond Linux From Scratch版本 1.0這個資料
15、是我遇到的非常好的資料,大家可以好好的享受,多看幾遍,經常的看,肯定會有很大的收獲的.3. 再有一個好的資料就是chinaunix了,這里面包含了一個linux howt中文資料,雖然網上到處都有,但是這里的比較全,便于查看:HOWTO 索引Linux HOWTOs目前已經有下列的 Linux HOWTOs 存在,共計 156 篇:4月28日編譯MINIGUI的問題裝好LINUX后, 嘗試著編譯了一下在PC上跑MINIGUI,配置編譯倒是一路無事:./configuremakemake install經過這3個步驟, 編譯好了MINIGUI在PC的動態(tài)庫,還有如下幾個小細節(jié):/usr/loca
16、l/lib這樣就指定了鏈接時查找MINIGUI的庫路徑。2. 執(zhí)行/sbin/ldconfig更新共享函數(shù)庫系統(tǒng)的緩沖.3. 修改GRUB的啟動文件grub.conf,在kernel那一行當中,加入VGA0x317, 以此打開FRAMEBUFFER支持。4. 編譯示例最后興沖沖的去MAKE示例, 結果遇到錯誤, 說在鏈接的時候找不到pthread_kill_other_threads_np()這個函數(shù)的定義, 于是在IS中查找了一下,發(fā)現(xiàn)這個函數(shù)僅有一次調用, 就是在/src/kernel/init.c文件當中這個函數(shù)TerminateGUI():void GUIAPI TerminateGU
17、I (int rcByGUI) if (rcByGUI >= 0) pthread_join (_mg_timer, NULL); #ifdef _LINUX_ else pthread_kill_other_threads_np (); &
18、#160; #endif 于是注掉了,重新編譯安裝了一次MINIGUI, 再編譯示例, 正常通過。5. 運行示例運行示例沒有馬上看到結果,提示說什么在初始化GUI時失敗, 于是想起用GDB來調試,結果高度的時候,發(fā)現(xiàn)有些函數(shù)符號找不到,不能正常源碼級跟進,百思不得其解, 于是在論壇上找找, 還是沒有找到原因。最后突然想起, 以前我在移值GDB時,用得很熟悉, 對于其執(zhí)行文件格式,調試信息格式都相當熟悉, 知道在調試信息加載時如果源碼文件目錄不對的話, 會出現(xiàn)這種問題,于是直接打開MINIGUI的SO庫文件來看, 發(fā)覺真的是路徑有問題, 產生問題的原因是:1. 之前我的MINIGUI是
19、放在WINDOWS上的盤上, 掛到/mnt/e目錄下, 后面把MINIGUI移到LINUX的根目錄下了, 是直接COPY的, 而且沒有重新的配置以及清除已經編譯的.o目標文件,所以那些文件的調試信息對就源碼都是指向/mnt/e目錄下的。2. 因為目錄指錯的原因,所以GDB無法正常找到調度信息, 無法正常源碼級調試,但是我不明白我的/mnt/e那個目錄下的MINIGUI是存在的, 為何GDB找不到,不甚明了,難道是因為mount掛上去的WIN磁盤目錄有在找尋時有問題? 這個掛上去的分區(qū)目錄在后面編譯LINUX時還會提到,問題不少,到時再說。找到不能正常調試的原因了, 于是源碼級調試, 最后跟到打
20、開輸入設備文件時,GDB調試器就死掉了, 不知何故, 但是差不多明白是輸入設備配置的問題吧。于是在到MINIGUI上的論壇上查找, 查找到原來在2.6版的內核當中,關于鍵盤以及MOUSE的設備名稱已經變化了,不再是:/dev/mouse于是查找內核的dev目錄, 找到MOUS設備名稱:/dev/input/mice于是打開MINIGUI的配置文件, 注間去MINIGUI的安裝目錄下的ETC文件夾下找,然后修改成如上把示, 終于可以正常的運行MINIGUI的示例了。MINIGUI還算是比較小的規(guī)模, 所以遇到問題實在很少, 以后我會詳細補記我在LINUX下編譯出現(xiàn)的種種怪問題, 以及如何解決問題
21、的,希望大家持續(xù)關注。4月29日嘗試建立整個開發(fā)的環(huán)境,如TFTP下載等安裝好LINUX FC5,于是準備嘗試編譯一下LINUX。在編譯LINUX之前,首先嘗試了一下如何把開發(fā)包中本來已經編譯好的映象文件DOWN到板子上運行。1. 用燒錄的東西,首先按步就斑的把redboot.bin這個文件燒錄到FLASH當中,這是一個BOOTLOAD工具,而且還支持人機界面,可能通過一些命令來下載內核到RAM當中,支持TFTP服務,因為考慮到通過網絡下載會快很多,于是選用TFTP。2. 建立TFTP環(huán)境,我安裝時沒有選擇安裝TFTP服務,于是須要自己安裝,在網上查找了半天,了解了TFTP服務的安裝以及如何配
22、置,如果默安裝了TFTP,則根目錄下面會有/tftpboot文件夾, 安裝倒是比較簡單:1. 安裝TFTP, 運行如下命令, 會直接從網終上下載安裝,如果有本地光盤,可以通過Add and Remove Software來添加安裝包。yum install tftp-server2. 配置TFTP,配置本來是很簡單的,找到文件/etc/xinetd.d/tftp, 如果沒有成功安裝則不會有這個文件,如果沒用安裝也不會有這個文件,只須編輯一下, 把disable的由YES改成NO:disable
23、60; =no另外還有一個特別要注意的就是防火墻的關閉,你如果開著它,就會導致下載的時候出現(xiàn):Can't load 'ramdisk.gz': operation timed out我被這個錯誤提示搞得浪費了幾個小時間,最后終于才在一篇文章中介紹到這個,在終端上運行:setup然后關掉 防火墻, 希望大家不要出現(xiàn)這種錯誤來浪費時間,這是經驗教訓。3. 使用TFTP,如果初學的人沒有用過TFTP,那么可能不太理解這個東西是如何使用的,其實相當簡
24、單,只須開啟TFTP服務即可,然后把你要下傳到板子上的文件放置在這個目錄下即可:開啟服務: #service xinetd restart如果你要命名板子下面可以上傳文件,則要修改服務器的TFTP目錄可寫:#chmod o+w /home/lqm/tftpboot如果你已經通過Redboot把LINUX以及它的磁盤文件下載到了RAM當中,并且運行起來了,那么此時你可以在跑起來的LINUX下面運行如下命令來獲取你在服務器上交*編譯好的執(zhí)行文件到目錄板上來運行:3. 如何與板子進行連接, 直接在命令行運行minicom,然后進
25、行配置,先按crtl+a, 再按 z,然后配置界面,設置串口的一些參數(shù),這些都不會有什么問題,之后在設置完成中,選擇保存設置,會將設置保存到/etc目錄下,下次啟動時默認加載。在REDBOOT命令行下輸入:這里,將內核ramdisk.gz下載至RAM的8M處,內核代碼在512K處,ramdisk.gz大小為0x600000這樣你的板子上就會跑起LINUX來了??偨Y:今天終于把整登上開發(fā)環(huán)境建立起來了,這樣才可以測試自己編譯的內核以及程序,不然的話沒辦法進行開了的。5月12日編譯LINUX的問題 前面有講過好多了, 但是還沒有怎么講到編譯LINUX時所遇到的問題,現(xiàn)在正式開始進入這一塊.EP93
26、XX開發(fā)包資源及工具文檔首先我的開發(fā)包是EP9302的, 是cirrus logic公司的, 由國內一個公司抄過來賣的, 在以下的地址可以下載到各種開發(fā)包, 這個現(xiàn)在是支持EP系統(tǒng)的板子的, 最早支持的是EP7312, 現(xiàn)在ARM9的應該也支持了, 我現(xiàn)在還沒有拾建起這個模擬器的環(huán)境, 以后會試試, 應該會方便調試一些.下載EP9302系統(tǒng)的開發(fā)包以及工具鏈及相關說明幫助文檔首先指出兩個容易出現(xiàn)的錯誤:1. 我先是在WINDOW下COPY光盤的開發(fā)包到磁盤E, 然后直接用WINRAR來解壓, 其實用WINRAR來解壓是有問題的, 一來格式不對; 二來解壓時間超級長;三來解決到最后一點點的時候會
27、報出一點錯誤;四來解壓后發(fā)現(xiàn)有個別文件丟失.2. 后面我進入LINUX后, 直接把E盤掛裝到/mnt/e目錄下:mount -t 'vfat' /dev/hd8 /mnt/e我后就開始配制, 結果配置的時候出現(xiàn)各種各樣的錯誤碼, 到后面編譯也遇到奇怪的問題, 最后沒有辦法, 直接把光盤的源碼包解壓到LINUX的根目錄下, 然后再來配置和編譯, 就沒有什么奇怪的問題了, 不知道這個問題是不是和掛裝的目錄相關, 目前還不太清楚.現(xiàn)在總體說明一下LINUX配置編譯的基本東西:1. 首先要安裝好針對ARM的交*編譯工具鏈, 一般的情況下你的開發(fā)板都會為你準備好了這些東西的, 所以無須你
28、自己去編譯那么多的工具鏈與庫, 我想這個工具是所以開發(fā)的基礎,弄錯了以后的工作是無法開展的.在LINUX下就有已經打包的針對LINUX平臺的工具包(.sh文件), 直接執(zhí)行就可以了,不過也有那些直接解壓就可以的, 以下地址有打包好的arm-linux-XXX一類的工具包, 目前還不太清楚arm-elf-gcc與arm-linux-gcc到底有何區(qū)別, 以后了解一下.1. 配置LINUX:LINUX的配置支持圖形化的配置, 圖形化配置時, 如果發(fā)現(xiàn)你的linux根目錄下面有.config配置文件, 會讀取這個文件作默認的配置文件. 然后調用它來產生圖形配置菜單及保存配置選項,生成配置產生的頭文件
29、(autoconfi.h等).3. menuconfig配置控件菜單選項: 各個模塊目錄下config.in, 如:如果用戶想要自己增加一個配置選項到LINUX當中, 則必須修改這些config.in文件, 以產生在make menuconfig時的配制菜單, 另外還要在各模塊目錄下的Makefile文件中增加自己相應模塊的.o文件, 則其編譯進內核.注: 在后面我增加ep9302的framebuffer支持時, 就是通過修改了上面列出的兩年config.in文件, 讓CPU為ep9302時也顯示出FB相關的支持選項, 以及鍵盤等支持項選.4. LINUX每一個相應模塊下面都有一個Makefi
30、le文件, 由根目錄下的Makefile文件來調用各級的Makefile文件來編譯生成內核, kernel.o這些分別是顯卡驅動, 字符設備驅動, 內核等打包生成的, 并沒有相應的video.c char.c kernel.c這些文件.特別提醒:請不要手動的修改配置文件, 這樣修改是無用的, 因為每次make 這個文件基本上就是.config文件的C語言頭文件版, 是被內核包含的一個文件, make dep時會根據(jù)這個文件來檢測內核的配置并產生依賴關系, 2007/05/15Linux與BootLoader的傳參今天算是有些收獲吧,總算把以前一些弄不清楚的問題搞明白了, 回過頭來一想原來是很簡
31、單的事, 不過我覺得還是值得多說幾句以記下來供初學者參考.我的開發(fā)包是廣州一家公司的, 不過他基本也照抄別人的開發(fā)包吧,什么聲卡/USB/串口等, 基本上原樣沒什么變化吧, 就是用的EP9302, 唯一提供多的東西就是把工具鏈以及庫等都打包了, 多少方便了些. 而且它針對不同的開發(fā)板,如EP9301, EP9315等, 都在各自的一個單獨文件夾中編譯, 所以開發(fā)包中的LINUX源碼目錄還是保持整潔的, 編譯各種EP9302時, 是在一個叫做EP9302文件夾下, 編譯的中間代碼都在一個隱藏文件.do_not_edit, 真是夾如其名, 意思就是你無須修改這個文件夾了, 這只是中間編譯結果存放的
32、地方, 最后所有的生成映象都會COPY到EP9302目錄下的, 外國人做事不是細心, 名字取得好極了.簡單的看看EP9302下的MAKEFILE文件, 相信大多數(shù)人都沒什么問題吧, 這個文件還是很方便的, 你只須要如下即可:make linuxconfigmake linux即完成了LINUX的配制與編譯, 無須(make menuconfig, make dep, make zImage), 但如果細心的話, 自己去看看開發(fā)包目錄下的buildrules, 就知道具體的原因了, 為了方便他們把他封裝成一些很方便的編譯SHELL.現(xiàn)在講講我所遇到的問題:我的問題在于, 我想對EP9302增加F
33、RAMEBUFFER的支持, 想加上顯卡驅動, 但是我卻總是看不到在配制菜單中有關EP9302的FRAMEBUFFER配制選項, 所以我就想借用EP9315的配制選項.當然了, 現(xiàn)在我再看這個問題,在我清楚了之后, 感覺已經不再是問題, 但是在我不了解LINUX的配制的時候, 我的問題是蠻多的:1. 如何往配置選項中加入自己定義的配制選項? 從而讓自己的驅動模塊可以讓用戶通過配置菜單來選擇, 讓自己的代碼被編譯進內核?2. 為什么很多的選項都看不到?3. 當我將顯卡的FRAMEBUFFER驅動編譯進內核后, 如何讓它開啟?問題1: 其實很簡單, 在LINUX下每一個模塊下面都有一個config
34、.in的文件, 就是這個文件控制著每一個LINUX模塊的編譯選項, 要加入自己的配置選項, 就在這個里面, 照著樣子加.問題2. 在相應模塊下的config.in, 控制著具體有哪些選項可選, 會根據(jù)相應的配制, 顯示下一級的相應配置, 因此針對不同的平臺, 不同的板子, 你能夠看到的子選項是不一樣的, 所以當我在EP9302的板子上, 想看到FRAMEBUFFER選項的時候, 一個都看不到, 當初我最開始弄不明白這個簡單問題, 苦惱了一段時間, 沒有想到這一層, 現(xiàn)在想清了, 這么easy.注:有關LINUX的配制方面, 我找到一篇很好的介紹文件, 大家可以看看:Linux內核配置系統(tǒng)淺析問
35、題3. 開啟FRAMEBUFFER支持, 在PC上的LINUX下來說是比較EASY的, 在GRUB上只須要在grub.conf文件有關內核位置那一行示加上vga=0x317(具體數(shù)字代表模式可以查看Documentation/FB下面文檔),但是在嵌入式平臺下面怎么辦呢? 參數(shù)如何傳, 誰來傳, 在哪傳?文檔介紹:1. 經過進一步的了解, 知道在ARM上面的LINUX, 上必須有BOOTLOADER才能夠啟動內核, 關于這一點大家可以查看內核文檔:DocumentationarmBootingDocumentationarmSetup另外還有幾篇介紹BOOTLOADER的文件, 都是在IBM上
36、面的, 那里資源很好, 大家在里面查找更多資源:2. 嵌入式系統(tǒng) Boot Loader 技術內幕3. Linux bootloader 編寫方法還有一篇更全面的E文文檔, 里面介紹了ARM的BOOTLOADER原理, 向內核傳遞的參數(shù), 以及實現(xiàn)一個簡單的BOOTLOADER原型:4. Booting ARM Linux我想通過這幾篇文章, 大家可以了解到以下幾點:1. 為什么要Bootloader-arm上linux內核, 有別于i386pc上的內核, 因為它沒有PC上的硬盤主引導扇區(qū)以及BIOS方面的支持, 所以必須有一個Bootloader來完成這個事.2. Bootloader主要做
37、什么-主要就是配置內存,初始化硬件環(huán)境,這部分工作可以等同為PC上的BIOS做的工作; 還有就是引導內核到正確位置, 設置內核的參數(shù)區(qū), 跳轉入內核執(zhí)行.現(xiàn)在回過頭講如何在打開FRAMEBUFFER支持的問題, 進和了解內核我們知道內核的參數(shù)有好些, 與FB相關的參數(shù)就是:#define ATAG_VIDEOLFB 0x54410008struct tag_videolfb u16 lfb_width;u16 lfb_height;u16 lfb_depth;u16 lfb_linelength;u32
38、160; lfb_base;u32 lfb_size;u8 red_size;u8 red_pos;u8 green_size;u8 green_pos;u8 blue_size;u8 blue_pos;u8 rsvd_size;u8 rsvd_pos;但是有關這個參數(shù), 我還沒有更深入的理解, 我發(fā)覺很少有BOOTLOADER在這里傳遞了這個參數(shù), 有待進一步了解.另外還有一個參數(shù)就是:
39、/* command line: 0 terminated string */#define ATAG_CMDLINE 0x54410009struct tag_cmdline char cmdline1; /* this is the minimum size */;這也是內核參數(shù)區(qū)中的一個參數(shù), 這個參數(shù)一般有一個默認值, 如果在配制內核的時候打開了這個支持的話, 有關這個參數(shù)可以看內核文檔:Documentationkernel-parameters.txt這個參數(shù)命令行可是支持相當?shù)膹V的, 我們的FB的支持選項就是"video=", 如果在命令行中加入video=E
40、P93xx, 就是告訴內核我們使用的是EP93XX的FB驅動.2007/05/16理解Linux的配置文件, 增加Lanrry顯示的相關配置選項今天可以說是比較順利吧, 沒有留下太多的郁悶, 碰到了不少問題, 也解決了一些問題, 但還是有不少不懂的問題.一掃前幾天的郁悶, 又換了臺機器, 如果大家一路看過我的日記的話, 應該知道這是第三臺機器了, 不知道是機器太破, 還是我的運氣實在的不好, 一路過來碰到這么多的破機器!因為前面那臺機器死機的問題, 不知道是我安裝的Fodera 5 的問題還是機器的風扇,硬盤,還是光驅的問題, 總之在LINUX狀態(tài)經常的死, 特別是我在MAKE LINUX的內
41、核后, 多半會死, 死多了還會導致啟動LINUX時中途就死了, 要多啟動好幾次; 但是在WINDOWS系統(tǒng)下, 死的時候很少, 不過今天也碰到一次了, 我在COPY網絡上另一臺機上的文件時, 因為文件很大, 所以居然死了一次.總之是問題相當?shù)亩? 我在前面都已經說過那些問題了, 現(xiàn)在不再重復了.而且我下載了Debian 4來安裝時, 也是在安裝基本系統(tǒng)那一節(jié)就進行不下去, 說是執(zhí)行什么出錯, 搞了幾次還是那樣, 沒辦法.中午的時候, 就終于換了機子了, 即第三臺機器, 這個機器倒是很好的, 風扇轉速不高, 噪聲好小, 幾乎聽不到, 于是就安裝Debain 4, 我一來是想驗證一下到底我刻錄的安
42、裝盤有沒有問題, 二來也想體驗一下這個LINUX的發(fā)行版.差不多四十多分鐘就裝好了, 一路順利, 沒有出錯, 進入系統(tǒng)后, 居然不讓ROOT用戶登錄圖形系統(tǒng), 郁悶, 于是用了另一個用戶, 但是進去什么也做不了, 文件也不能創(chuàng)建, 于是在網上找找, 原來是在"登錄設置"中要設置成ROOT用戶可以登錄圖形系統(tǒng).現(xiàn)在開始準備LINUX的編譯環(huán)境, 把工具以及源碼開發(fā)包都COPY過來了, 結果搞了開始就出問題了.1. 在ROOT用戶下找不到.bash_profile文件, 這個文件要修改一下, 設置一下PATH路徑, 讓編譯的工具路徑不用每次設置, 結果在DEBIAN 4下怎么都
43、找不到這個文件, 查找也找不到.2. 手工設置了路徑, 然后配置LINUX時, 說什么"gcc command not found", 好奇怪, 為什么是GCC, 而且根據(jù)提示, 好象說什么沒有配置平臺什么的, 這樣第一步的make menuconfig都進行不下去了, 不知何故.于是掉過頭來, 再次安裝FC 5, 這次安裝也差不多四十分鐘, 等得還是很郁悶的, 一邊看書一邊等.關于DEBIAN上的問題, 目前還不清楚原因, 留待日后再回過頭來看看是什么原因, 相信肯定是有不了解的原因在內,由此也可以LINUX在不同環(huán)境下配置編譯的問題是多樣的等到安裝完成后, 一路編譯,
44、基本沒有出錯, 但是總在最后鏈接的時候, 報告一些變量找不到定義, 經常一陣分析, 原來是缺少鍵盤映象的相關定義, 后面查知了這幾個文件編譯進去內核的開關, 于是自己在.config文件中加入, 誰知結果還是一樣的, 郁悶了一會兒, 才搞清楚我又犯了先前的錯誤, 如果配置選項不屬于你指定的處理器配置, 你千萬不要自己去修改.config文件, 你那樣修改來打開配置是不行的, 只能通過去修改config.in文件, 打那些配置選項加入到你的處理器當中.具體過程如下:EP9302這個開發(fā)板本身是沒有LCD支持的, 現(xiàn)在我要為它增加LCD方面的支持,借助的是EP9312等有LCD支持的配制, 然后修
45、改相應的EP93xxfb.c這個LCD驅動,就能完成EP9302的FB驅動, 通過分析總結以及嘗試, 必須如下修改配制: "$CONFIG_ARCH_EP9302" = "y" -o 內容, 這樣才make menuconfig時才能看到framebuffer相關的選項, 否則無法看到ep9302相關”Console Driver”下的Framebuffer配置選項. if "$CONFIG_ARCH_EP9307" = "y" -o
46、; "$CONFIG_ARCH_EP9312" = "y" -o "$CONFIG_ARCH_EP9302" = "y" -o "$CONFIG_ARCH_EP9315" = "y" ; then
47、; bool ' EP93xx Frame Buffer support' CONFIG_FB_EP93XX else define_bool CONFIG_FB_EP93XX n fi 即增加相關Lanry顯卡的顯示模式以及顏色深度的配置.# houhh 20070608. if "$CONFIG_ARCH_EP9302" = "
48、;y" ; then bool ' EP93xx Lanrry Frame Buffer support' CONFIG_FB_EP93XX_LANRRY else define_bool CONFIG_FB_EP93XX_LANRRY n fi if "$CONFIG_FB_EP93XX_LANRRY" = "y" ; then choice ' EP93xx Lattice Frame Buffer Display Resolution' "640x480 CONFIG_FB_EP93XX_LANR
49、RY_640x480 800x600 CONFIG_FB_EP93XX_LANRRY_800x600 1024x768 CONFIG_FB_EP93XX_LANRRY_1024x768" 800x600 choice ' EP93xx Lattice Color Depth' "8bpp_default CONFIG_FB_EP93XX_LANRRY_8BPP 8bpp_custom CONFIG_FB_EP93XX_LANRRY_8BPP_CUSTOM 16bpp_565 CONFIG_FB_EP93XX_LANRRY_16BPP_565" 16
50、bpp_565 fi這樣在配制時你才可以打開SPI-PS2 CONFIG_EP93XX_KBD_SPI/CONFIG_EP93XX_VT選項,其原因是當你打開FRAMEBUFFER支持時, 前提是必須打開CONFIG_VT, 這一點可以去看看:這個文件是針對ARM平臺的配置, 在里面查找一下CONFIG_VT, 看看就不難理解只有打開了它才能打開FRAMEBUFFER支持, 在MENUCONFIG配置時,打開它后才能看到console driver選項,才能進去配置FRAMEBUFFER支持。特別說明: 這里再次特別的說明一下, 在進行LINUX配制時, 千萬不要自己去手動的找開一些選項的支持
51、, 手工的修改.config配置文件是不起任何作用的, 這個文件必須是由配制程序生成, 在執(zhí)行make dep是會出錯的, 這一點我相信初學者是容易出錯的, 特引提出來.小插曲:前段時間我提到了, 我在裝了linux fc5的機器上直接安裝WIN系統(tǒng), 導致了LINUX系統(tǒng)無法啟動了, 看不到GRUB菜單了, 于是使用了LINUX的修復盤,作如下操作將LINUX系統(tǒng)找回來了:1. root (hd0, 5)2. setup (hd0, 0)注: 5是我的LINUX根目錄所在盤,至于0我們稍后會講,正是因為這個浪費我不少時間 其實正確的操作如下, 差別很小,我回想起,看到網上有人修復GRUB時是
52、如下操作的:1. root (hd0, 5)2. setup (hd0) 特別注意這第2條命令, 比起setup (hd0, 0)少了什么, 沒有0表示的才是寫GRUB到硬盤主引導記錄, 不然就是寫到第一個分區(qū),我的第一個分區(qū)正好是WIN分區(qū),如此修復GRUB后,WIN系統(tǒng)的引導記錄就被改寫了, 而會直接啟動GRUB。至此,我的WIN系統(tǒng)與LINUX系統(tǒng)終于可以共存了, 通過GRUB可以正常的啟動我的WIN系統(tǒng)了,LINUX也可以啟動了,問題至些我想也不用再多說其它的什么了, 有什么很小的問題也會折磨人的, 大家可以想見我在此過程中的痛苦,但是我堅
53、持下來了,平下心靜下氣,先把問題放下,一時解決不了,日后再來嘛 2007/05/17編譯MINIGUI的應用示例的交叉編譯今天上午總結分析了一下先前的一些工作, 整理補記了部分的分析日記,不知道對于大家來說,不是不太零亂了? 以至于看不懂? 或者太長? 呵呵,我相信如果大家認真仔細去看,一定能夠體會的用心??偟膩碚f,是編譯了MINIGUI針對ARM庫以及示例文件,如Helloworld,button等程序,先說說這個過程中遇到的問題以及收獲:1. 開始的時候,有點迷茫,不知道如何下手,先前雖然編譯過PC上運行的MINIGUI程序,但是在PC上編譯是很簡單的步驟,雖然運行時有些問題,但總體來說整
54、個過程是相當清晰的;編譯ARM上跑的MINIGUI,我開始不太清楚的問題是:1.minigui須要相應C庫文件以及頭文件在哪里, 是用什么庫?glibc或者ulibc?2.minigui須要的相應的LINUX系統(tǒng)頭文件在哪?3.如果將MINIGUI配置成ARM平臺上運行,以及如何配置成針對具體的操作系統(tǒng)?如傳統(tǒng)的LINUX或者是LINUX或者是ECOS?2. 帶著以上的幾個問題,我精略的查看了MINIGUI源碼目錄下的配置文件,發(fā)現(xiàn)在其build目錄下有一些已經配置好的針對LINUX的配置腳本,用的是UCLIB庫: 它是針LINUX的, 因此我覺得可以把它拿來作為我們的配制腳本,雖然它的上面指
55、定了LINUX頭文件以及UCLIB庫文件的路徑,但其實我根本沒有這些東西, 我的系統(tǒng)已經安裝好了針對ARM的工具鏈,包括各自LINUX頭文件以及庫,因此只要用的是ARM的編譯工具,默認用的就是這些,由此解決了MINIGUI所以須的LINUX頭文件以及C庫的疑問。3. 直接執(zhí)行buildlib-LINUX-arm3000這個配置腳本,然后make, make install, MINIGUI的頭文件以及生成的靜態(tài)庫文件就被編譯到/LINUX/minigui目錄下了,當然大家可以修改這個安裝目錄,我沒有修改。4. 開始編譯示例,這一步遇到一個奇怪的問題,雖然我也用了buildlib-LINUX-a
56、rm3000這個腳本,但是配制的時候,如果用在編譯設置(CFLAGS)中加入頭文件包含時,就會配置進提示C編譯時無法創(chuàng)建執(zhí)行映象,在LDFLAGS加入庫文件包含選項時也是一樣,于是就不加它們,結果正常編譯通過,生成了MAKEFILE文件,但是編譯示例時提示找不到MINIGUI的頭文件以及庫文件,最后解決辦法是手動找到LDFLAGS以及CFLAGS兩個選項,手動加入頭文件包含與庫文件包含:LDFLAGS = -Wall -L/LINUX/minigui/lib -lc CFLAGS = -O2 -D_linux_ -I/LINUX/minigui/include-I/LIN
57、UX/minigui/include/ctrl -fno-builtin -nostartfiles -Wall-Wstrict-prototypes -pipe -D_REENTRANT其實如果將MINIGUI安裝到系統(tǒng)默認的頭文件包含路徑以及庫文件路徑(注意是針對ARM平臺的,不是編譯宿主機平臺),就可以不用加這些選項吧,目前還沒有試過。4. 運行MINIGUI時,提示非法指令編譯好了MINIGUI,因為是帶調試信息,而且指定的是靜態(tài)庫,如果覺得在的話,可以自己在連接選項當中將-g參數(shù)去掉,這樣就會小很多;我編譯為一個MINIGUI的示例hell
58、oworld,然后通過TFTP下載到板了(前面日記有講如何建立TFTP以及如何進行下載), 結果提示非法指令,于是想起來用GDB來調試.5. 用GDB通過網口調試MINIGUI示例程序開始我想到的是串口,沒想到我的網口,真是郁悶,以前用GDB很熟悉了,所以這里就輕車熟路,首先在板子運行 起GDBSERVER:板子上:開發(fā)主機:arm-linux-gdbtarget symbol-file /tftpboot/helloworld經過如上簡單操作就可以進行調試了, 首先是開啟板子上的調試代理端,等侯主機上的GDB來連接,然后用主機上的GDB來控制板卡上的程序執(zhí)行,記全在主機上記得加載調試程序的符
59、號信息。結果弄了半天, 發(fā)現(xiàn)根本沒有跑到用戶程序的main()就提示非法指令了, 實在是搞不懂, 看來只有留待明天才能解決了。小插曲:1. 于是運行,結果提示如下錯誤:rootlocalhost firefox# ./firefox./firefox-bin: error while loading shared libraries: libstdc+.so.5: cannot open shared object file: No such file or directory先前就下載過一次,當時直接運行沒有任何問題,持來這次的LINUX安裝少安裝了一些什么庫文件,于是網上找找,別人提示如下做
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院品牌宣傳課件模板
- 健康理療性保健推拿課件
- 2024年垃圾分類桶項目資金申請報告代可行性研究報告
- 葛洲壩資產核銷管理辦法
- 虛擬資源庫存儲管理辦法
- 融水縣應急預案管理辦法
- 衡陽縣黃碼人員管理辦法
- 行長投訴接待日管理辦法
- 裝配式建筑銷售管理辦法
- 西安市權責清單管理辦法
- 質量過程報告記錄匯總表-scr與ncr表格報檢單
- 患者誤吸風險評價表完整優(yōu)秀版
- 湖南省長沙市2022-2023學年新高一英語入學分班考試試卷【含答案】
- Q∕SY 1477-2012 定向鉆穿越管道外涂層技術規(guī)范
- k-bus產品手冊中文版ip interface使用手冊
- 第九講有機化學結構理論
- 能力管理控制程序
- 工程化學復習要點及習題解答童志平版本PPT課件
- 論中心蝶閥、單、雙、三、四偏心蝶閥
- 《中國語言文化》課程教學大綱
- 庭審筆錄郭英賀駁回-離婚案件
評論
0/150
提交評論