三大協助命令:
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
此外,還有一些最佳化等級選項。