linux核心調試

來源:互聯網
上載者:User

三大協助命令:

XXX -h(xxx –help)

man -a XXX

info XXX

 

arm-elf-XXX 工具集是用於uclinux的。

 

裝置驅動程式的開發過程:

1.查看原理圖,理解裝置的工作原理。

2.定義裝置號。

3.實現初始化函數。驅動的註冊和卸載。

4.設計所要實現的檔案操作,定義file_operations結構。

5.實現中斷服務,並用request_irq向核心註冊,中斷並不是每個裝置驅動所必需的。

6.編譯該驅動程式到核心中,或者用insmod命令載入模組。

7.測試該裝置,編寫應用程式,對驅動程式進行測試。

 

與中斷和記憶體不同,使用一個沒有申請的I/O連接埠不會使處理器產生異常,也就不會導致諸如“segmentationfault”一類的錯誤發生。由於任何進程都可以訪問任何一個I/O連接埠,此時系統無法保證對I/O連接埠的操作不會發生衝突,甚至因此而使系統崩潰。因此,在使用I/O連接埠前,也應該檢查此I/O連接埠是否已有別的程式在使用,若沒有,再把此連接埠標記為正在使用,在使用完以後釋放它。在裝置驅動程式中,一般都需要用到計時機制。在Linux系統中,時鐘是由系統接管的,裝置驅動程式可以向系統申請時鐘。printk列印的資訊不僅出現在螢幕上,同時還記錄在檔案syslog裡。

核心模組與系統中其他程式一樣是已連結的目標檔案,但不同的是它們被連結成可重定位映像。核心將為其分配一個新的module結構,以及足夠的核心記憶體,並將新模組添加在核心模組鏈表的尾部,然後將新模組標記為uninitialized。

 

老的:

ret = devfs_register_chrdev(GPIO_LED_MAJOR,"led_drv", &GPIO_LED_ctl_ops);

混雜裝置:

ret= misc_register(&misc);

 

塊裝置驅動程式的編寫與字元裝置驅動程式的編寫有很大不同,塊裝置驅動最具特色的就是其請求隊列。塊裝置一般有個通用塊層。一個bio結構體是在通用塊層或更底層對塊裝置i/o操作的的表示單位。通常1個bio對應1個I/O請求。

 

 

查看可執行映像的大小:size

得到映像檔案或目標檔案中的符號列表:objdump -syms test.o

反組譯碼映像檔案:objdump -disassemble test.o

編譯一個源檔案:gcc test.c -o  test 或者 gcc -o image first.c second.c thrid.c

包含標頭檔編譯:gcc test.c -I../inc/  -I../../inc2 -o test

在源檔案中定義的符號常量(使用:#define)可以在編譯的時候使用:gcc -D TEST_CONFIGURATION test.c -o test

一些調試選項加上 -g

檢查普通警告的選項是-Wall

此外,還有一些最佳化等級選項。

 

 

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.