第一次分析核心源**,整個核心**繞來繞去,人比較容易暈,而且深入追蹤幾次後不知道自己要幹什麼呢?自己看核心**,看驅動,上網搜資料也有好一段時間了,大概總結一下自己的一些心得,很簡單的,不是寫驅動的心得,而是怎麼去檢視,最近看uart終端裝置驅動,就以這個為例吧。
第一,弄清楚主要結構框架
這人是大概弄清楚主要框架,流程,一般linux核心驅動都是封裝,分層,抽象,繼承的,所以要弄個大概,知道幾個關鍵的結構,當然要完全弄清楚了,那就是高手了,後面肯定都沒什麼問題了,我是新手,弄個大概就可以啦。以uart終端裝置為例,需要大概知道匯流排,裝置,驅動的層次,然後是platform匯流排,platform裝置和platform驅動的關係,以及裡面幾個重要的結構,像tty_operations tty_driver tty_struct 以及uart核心層的uart_ops , uart_driver , uart_port等等一些中重要的結構,這個的話網上有很多很詳細的文章。
第二,弄清楚主要流程
像匯流排,裝置,驅動的話,這個大概的流程就是要註冊匯流排,然後註冊裝置,然後註冊驅動(當然這裡裝置和驅動註冊沒有先後之分,也可以先註冊驅動在註冊裝置),然後匯流排就呼叫驅動去匹配(match)裝置與驅動,匹配成功後就呼叫驅動中的探測(probe)函式初始化裝置。
第三,弄清楚驅動在核心中的位置
這個我不知道別人遇到過沒有,反正我是遇到了,而且還比較棘手,我不知道相關的驅動的源**在**,都說驅動的話一般只是去修改一些核心中的**,但是我連這個**都不知道在**,用個source insight在核心**中找來找去的,核心**太多無法找啊。現在總結幾點,乙個要修改的主要幾個大的目錄就是arch,driver暫時我還只用到這倆個目錄,然後一邊與硬體相關的基本在arch裡面,當然主要看的是arch裡面對應的平台和driver裡面所對應的驅動裡面去查詢。
第四,看makefile與kconfig檔案
看這倆個檔案,主要是定位到這個驅動設計到的一些其他核心的檔案,比如一些已經抽象好的一些介面等等,都可以在這裡找到檔案。
第五,uart資源的一些具體的目錄
1、首先是uart裝置的resource資源分配的檔案,這個我覺得比較重要,因為以後這部分可能最需要修改的
arch/arm/plat-s3c24xx/devs.c
這個目錄包含了platform裝置資源的分配
2、platform裝置的註冊與s3c2440的配置檔案
arch/arm/mach-s3c2440/mach-smdk2440.c
這個檔案包含了大部分的platform裝置的註冊以及很多的裝置的配置,比如lcd的一些引數配置
3、arch/arm/plat-samsung/dev-uart.c 定義了串列埠裝置對應的平台裝置
4、arch/arm/mach-s3c2440/mach-smdk2440.c中有串列埠一些暫存器的初始化配置
5、arch/arm/plat-s3c/init.c這個函式裡面註冊了串列埠裝置,這個檔案主要是初始化cpu,時鐘,串列埠等等,串列埠的初始化放在這裡應該也是有道理的。
Linux裝置驅動之《字元裝置驅動》
linux裝置中最大的特點就是裝置操作猶如檔案操作一般,在應用層看來,硬體裝置只是乙個裝置檔案。應用程式可以像操作檔案一樣對硬體裝置進行操作,如open close read write 等。下面是乙個字元裝置驅動程式的簡單實現test.c 模組分析 1.初始化裝置驅動的結構體 struct fil...
Linux裝置驅動之字元裝置驅動
一 linux裝置的分類 linux系統將裝置分成三種基本型別,每個模組通常實現為其中某一類 字元模組 塊模組或網路模組。這三種型別有 字元裝置 字元裝置是個能夠像位元組流 類似檔案 一樣被訪問的裝置,由字元裝置驅動程式來實現這種特性。字元裝置可以通過檔案系統節點來訪問,比如 dev tty1等。這...
linux驅動之塊裝置驅動
塊裝置驅動的系統架構 塊裝置註冊過程 1,註冊裝置塊驅動程式 register blkdev 2,初始化請求佇列 blk init queue 3,指明扇區的大小 blk queue logical block size dev queue,sect size 4,申請乙個gendisk結構,初始化...