999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

嵌入式Linux內(nèi)核調(diào)試技術(shù)

2008-01-01 00:00:00宋尚春
電子產(chǎn)品世界 2008年1期

摘要:由于沒有通用的嵌入式Linux操作系統(tǒng),開發(fā)相應(yīng)的嵌入式產(chǎn)品時(shí),必須對(duì)Linux內(nèi)核和驅(qū)動(dòng)程序進(jìn)行調(diào)試。本文主要講述如何使用BDI2000仿真器與LinuxScope-JTD調(diào)試器進(jìn)行嵌入式Linux內(nèi)核的調(diào)試,提供一個(gè)便捷、高效的解決方案。

關(guān)鍵詞:嵌入式Linux;內(nèi)核調(diào)試;仿真器;調(diào)試器

近年處理器技術(shù)發(fā)展速度加快,嵌入式領(lǐng)域發(fā)生了翻天覆地的變化。特別是網(wǎng)絡(luò)的普及,消費(fèi)電子異軍突起,嵌入式與互聯(lián)網(wǎng)成為最熱門的技術(shù)。在所有操作系統(tǒng)中,Linux是發(fā)展較快、應(yīng)用較廣泛的一種操作系統(tǒng)。Linux的開放性以及其他優(yōu)秀特性使其成為嵌入式系統(tǒng)開發(fā)的首選。嵌入式系統(tǒng)開發(fā)所面臨的問題

嵌入式軟件開發(fā)有別于桌面軟件系統(tǒng)開發(fā)的一個(gè)顯著的特點(diǎn)是,一般需要一個(gè)交叉編譯和調(diào)試環(huán)境,即編輯和編譯軟件在主機(jī)上進(jìn)行,編譯好的軟件需要下載到目標(biāo)機(jī)上運(yùn)行,主機(jī)和目標(biāo)機(jī)之間建立起通訊連接,并傳輸調(diào)試命令和數(shù)據(jù)。由于主機(jī)和目標(biāo)機(jī)往往運(yùn)行著不同的操作系統(tǒng),而且處理器的體系結(jié)構(gòu)也彼此不同,這就提高了嵌入式開發(fā)的復(fù)雜性。

總的來說,嵌入式開發(fā)所面臨的問題主要表現(xiàn)在以下幾個(gè)方面。

涉及多種CPU及多種OS

嵌入式的CPU或處理器包括MIPS、PPC、ARM,XScale等不同的架構(gòu),這些處理器上運(yùn)行的操作系統(tǒng)也有VxWorks、Linux、μC/OS、WinCE等多種。在一個(gè)企業(yè)之內(nèi),可能會(huì)同時(shí)使用好幾種處理器,甚至幾種嵌入式操作系統(tǒng)。如果需要同時(shí)調(diào)試多種類型的電路板,那復(fù)雜性是可想而知的。這也是我們選用瑞士Abatron公司的BDI2000的原因之一,它是一款功能強(qiáng)大的JTAG/BDM通用仿真器。它支持:PPC/MIPS/ARM/XSCALE/CPU12/CPU32/M-CORE/ColdFire等多種處理器,支持Windows/Linux系統(tǒng)平臺(tái),以及多種第三方調(diào)試器,并且對(duì)Flash的燒寫也簡(jiǎn)單方便。

開發(fā)工具種類繁多

通常各種操作系統(tǒng)有各自的開發(fā)工具,在同一系統(tǒng)下開發(fā)的不同階段也會(huì)應(yīng)用不同的開發(fā)工具。如在用戶的目標(biāo)板開發(fā)初期,需要硬件仿真器來調(diào)試硬件系統(tǒng)和基本的引導(dǎo)程序,然后進(jìn)行操作系統(tǒng)及驅(qū)動(dòng)程序的開發(fā)調(diào)試。在調(diào)試應(yīng)用程序階段可以使用交互式的開發(fā)環(huán)境進(jìn)行軟件調(diào)試,在測(cè)試階段需要一些專門的測(cè)試工具軟件進(jìn)行功能和性能的測(cè)試。在生產(chǎn)階段需要固化程序及出廠檢測(cè)等等。BDl2000可以適應(yīng)開發(fā)的各個(gè)階段,節(jié)約企業(yè)的支出和簡(jiǎn)化管理難度。

對(duì)目標(biāo)系統(tǒng)的觀察和控制

由于嵌入式硬件系統(tǒng)千差萬別,軟件模塊和系統(tǒng)資源也多種多樣,要使系統(tǒng)能正常工作,軟件開發(fā)者必須要對(duì)目標(biāo)系統(tǒng)具有完全的觀察和控制能力,例如硬件的各種寄存器、內(nèi)存空間、操作系統(tǒng)的信號(hào)量、消息隊(duì)列、任務(wù)、堆棧等。

此外,嵌入式系統(tǒng)變化更新比較快,對(duì)開發(fā)時(shí)間要求比較緊,需要一套功能強(qiáng)大的嵌入式軟件集成開發(fā)工具,用于嵌入式軟件開發(fā)的各個(gè)階段。美國Ultimate Solution公司的LinuxScope-JTD調(diào)試器是一個(gè)很好的選擇,它專門用于配合BDl2000仿真器,特點(diǎn)是基于Eclipse的集成開發(fā)環(huán)境和插件技術(shù);提供腳本定制功能實(shí)現(xiàn)目標(biāo)機(jī)的特殊操作;提供Linux內(nèi)核調(diào)試功能,容易修改和觀察硬件寄存器;增強(qiáng)的MI接口可識(shí)別硬件斷點(diǎn)及模塊跟蹤;具有標(biāo)準(zhǔn)調(diào)試特性;支持Linux應(yīng)用程序的開發(fā);以及Windows/Linux系統(tǒng)平臺(tái)。

嵌入式Linux內(nèi)核的調(diào)試

編譯內(nèi)核

本文所調(diào)試的是MontaVista Linux,硬件是Marvell公司Xscale PXA250。它擁有超過兩千多用戶和眾多的MontaVista Linux產(chǎn)品在市場(chǎng)上銷售,覆蓋從智能手機(jī)、高清電視、機(jī)器人、無線網(wǎng)絡(luò)設(shè)備到3G電信服務(wù)器等各種嵌入式應(yīng)用。MontaVista Linux本身就是用BDl2000來開發(fā)調(diào)試的。

進(jìn)入內(nèi)核源碼目錄下,即可配置完成相關(guān)選項(xiàng)并準(zhǔn)備編譯。配置時(shí)不要選中KGDB(軟件基內(nèi)核調(diào)試),否則會(huì)和BD12000沖突。為了調(diào)試內(nèi)核,需要在編譯時(shí)加入調(diào)試信息,否則將無法看到源代碼。修改內(nèi)核源碼根目錄下的Makefile,在CFLAGS宏定義的末尾添加“-ggdb”選項(xiàng),保存退出。這里加上gdb是為了更好的使代碼適合gdb調(diào)試器,另外注意Makefile中的優(yōu)化設(shè)置,有些時(shí)候優(yōu)化會(huì)調(diào)整代碼執(zhí)行的順序,在內(nèi)核的調(diào)試階段,不要加入優(yōu)化選項(xiàng)。

內(nèi)核調(diào)試

首先,配置BD12000,確保目標(biāo)機(jī)的正常初始化。通常來說,到了調(diào)試內(nèi)核的階段,電路板的boot程序應(yīng)該是正常的,可以利用boot來完成目標(biāo)機(jī)的初始化;另一種方式是通過BDI的配置文件來完成。

接下來就是下載代碼進(jìn)行調(diào)試。如果代碼已經(jīng)固化,那僅下載調(diào)試信息給仿真器即可;否則需要把代碼下載到RAM里運(yùn)行,同時(shí)下載調(diào)試信息給仿真器。本文所用的是后一種方式。

由于Linux運(yùn)行之后會(huì)啟動(dòng)MMU而使地址重映射,因此第一個(gè)斷點(diǎn)通常在函數(shù)start_kernel(),而且只能設(shè)置為硬斷點(diǎn)。硬件斷點(diǎn)是非常有限的,有的處理器甚至只能設(shè)置一個(gè)。所以,在調(diào)試Linux內(nèi)核時(shí),使用普通的GDB進(jìn)行斷點(diǎn)設(shè)置會(huì)非常不方便。LinuxScope可以很方便地切換斷點(diǎn)模式,并支持軟斷點(diǎn),使斷點(diǎn)的設(shè)置不再受到限制,為調(diào)試Linux內(nèi)核提供強(qiáng)有力的支持。具體步驟如下:

1)BDI配置文件的斷點(diǎn)模式:soft;

2)LinuxScope配置默認(rèn)的斷點(diǎn)模式:soft/hard都可以;

3)用BDI下載壓縮的內(nèi)核:10ad0x20000 zimage bin

4)把PC指針指到內(nèi)核入口地址:ti0x30000;

5)運(yùn)行LinuxScope,在start_kernel處設(shè)置硬件斷點(diǎn);

6)go,停下來后再設(shè)置軟斷點(diǎn)即可。

模塊內(nèi)核的調(diào)試

我們使用BD12000來調(diào)試Linux內(nèi)核的另外一個(gè)重要原因,就是它可以支持調(diào)試內(nèi)核模塊。內(nèi)核模塊是一些可以讓操作系統(tǒng)內(nèi)核在需要時(shí)載入和執(zhí)行的代碼,這意味著它可以在不需要時(shí)由操作系統(tǒng)卸載。這種方式可以擴(kuò)展操作系統(tǒng)內(nèi)核的功能,而不需要重新啟動(dòng)系統(tǒng),這一點(diǎn)對(duì)調(diào)試驅(qū)動(dòng)程序的工程師特別有用。因?yàn)槿绻?qū)動(dòng)程序編譯進(jìn)內(nèi)核的話,會(huì)增加內(nèi)核的尺寸,還要改動(dòng)內(nèi)核的源文件,而且不能動(dòng)態(tài)地卸載,不利于調(diào)試,所以推薦使用模塊方式。

調(diào)試Linux 2.4內(nèi)核模塊

LLqux 2.4內(nèi)核模塊的調(diào)試比較簡(jiǎn)單,使用命令“Lnsmod-m”來加載模塊。參數(shù)“-m”非常重要,它的功能是在把模塊加載到內(nèi)存時(shí)產(chǎn)生一個(gè)加載map表。然后通過LinuxScope調(diào)試器加載相應(yīng)的調(diào)試信息。例如:

在這些信息中,我們用到的只有text、rodata、data、bss。當(dāng)然,把相關(guān)的信息輸入LinuxScope調(diào)試器,它會(huì)把以上地址信息加入到gdb中進(jìn)行模塊功能的調(diào)試。

這里需要注意的是對(duì)模塊進(jìn)行編譯時(shí),也需要增加“-g”選項(xiàng)。

另外,這種方法也存在一定的不足,它不能調(diào)試模塊初始化的代碼,因?yàn)榇藭r(shí)模塊初始化代碼已經(jīng)執(zhí)行過了。如果初始化部分有問題,那么將無法進(jìn)行調(diào)試。遇到這樣的情況可以修改代碼,延遲初始化部分的執(zhí)行。另外,也可以采用以下替代方法:當(dāng)插入內(nèi)核模塊時(shí),內(nèi)核模塊機(jī)制將調(diào)用函數(shù)sys_nit_module(kernel/modle.c)執(zhí)行對(duì)內(nèi)核模塊的初始化。程序代碼片斷如下:

在該語句上設(shè)置斷點(diǎn),也能在執(zhí)行模塊初始化之前停下來。

調(diào)試Linux 2.6內(nèi)核模塊

在Linux 2.6內(nèi)核系統(tǒng)中,由于module-init-tools工具的更改,insmod命令不再支持-m參數(shù),只有采取其他的方法來獲取模塊加載到內(nèi)核的地址。

比較簡(jiǎn)單的方式是修改內(nèi)核配置文件,使系統(tǒng)支持CONFIG_KALLSYMS,這樣就可以把相關(guān)的符號(hào)信息放到目錄/sys下,然后通過LinuxScope調(diào)試器加載相應(yīng)的調(diào)試信息。通過在模塊初始化函數(shù)中放置一下代碼,也可以獲得模塊加載到內(nèi)存中的地址,只是這樣要麻煩一些。

應(yīng)用程序的調(diào)試

到了應(yīng)用程序調(diào)試的階段,仿真器就可以“功成身退”了,剩下的調(diào)試任務(wù)就由LinuxScope調(diào)試器來獨(dú)自完成。此時(shí)只要在目標(biāo)系統(tǒng)中啟動(dòng)“gdbserver”,調(diào)試應(yīng)用程序非常的方便。

結(jié)語

面向行業(yè)、應(yīng)用和設(shè)備的嵌入式Linux工具軟件和嵌入式Linux操作系統(tǒng)平臺(tái)是未來發(fā)展的必然趨勢(shì)。跟蹤Linux的發(fā)展,符合標(biāo)準(zhǔn),遵循開放是大勢(shì)所趨,嵌入式Linux也不例外。Linux調(diào)試技術(shù)的進(jìn)步為L(zhǎng)inux在嵌入式領(lǐng)域的應(yīng)用廣泛性提供了保證。本文所講述的仿真器技術(shù)和調(diào)試器技術(shù)可以極大的提高開發(fā)者的效率。

主站蜘蛛池模板: 91无码人妻精品一区| 亚洲欧美不卡中文字幕| 久久久亚洲色| 一本色道久久88综合日韩精品| 大陆国产精品视频| 中文无码影院| 国产精品毛片一区| 欧美不卡在线视频| 免费高清毛片| 成人午夜免费视频| 午夜免费视频网站| 久久午夜影院| 亚洲首页在线观看| 国产成人调教在线视频| 色综合成人| 美女视频黄又黄又免费高清| 久久久久免费看成人影片| 国产成人AV男人的天堂| 日韩中文无码av超清| 中文无码伦av中文字幕| 亚洲中文字幕无码mv| 成人国产小视频| 啦啦啦网站在线观看a毛片| 国产成人免费视频精品一区二区| 搞黄网站免费观看| 国产精品jizz在线观看软件| 国产精品lululu在线观看| 国产日韩久久久久无码精品| 韩国v欧美v亚洲v日本v| 欧美不卡视频一区发布| 亚洲一级毛片在线观播放| 99精品久久精品| 69综合网| 精品综合久久久久久97超人该| 国产精品视频白浆免费视频| 国产福利一区在线| 亚洲午夜福利精品无码不卡| 无码在线激情片| 色首页AV在线| 欧美区日韩区| 成人一级黄色毛片| 精品国产网| 国产噜噜在线视频观看| 玖玖精品在线| 精品第一国产综合精品Aⅴ| 国产 在线视频无码| 日本在线亚洲| 日韩色图区| аⅴ资源中文在线天堂| 亚洲欧美激情小说另类| 国产xx在线观看| 精品午夜国产福利观看| 无码粉嫩虎白一线天在线观看| 91福利免费视频| 亚洲婷婷丁香| 91福利一区二区三区| 日本免费福利视频| 亚洲日本中文综合在线| 国产精品福利社| 欧美黄色网站在线看| 久久91精品牛牛| 在线观看国产黄色| 日韩第九页| 动漫精品中文字幕无码| 99热最新网址| 亚洲欧美日韩另类| 免费毛片视频| 91成人免费观看| 国产一在线观看| 日本爱爱精品一区二区| 日韩在线视频网| 一本大道香蕉高清久久| 色综合久久无码网| 亚洲免费成人网| 亚洲伊人久久精品影院| 亚洲第一成年人网站| 区国产精品搜索视频| 一本大道无码高清| 成人在线第一页| 欧美一区二区三区欧美日韩亚洲| 亚洲swag精品自拍一区| 成年人福利视频|