添加内核驱动模块(2)(mydriver.c+ Konfig+Makefile )
前一篇,我們編寫了驅動框架。
其中,使用了一個函數add_gpio_pmodoled_device_to_bus()
現在,我們看看這個函數做哪些工作。
caller調用這個函數時,傳遞了一個指針,它是gpio_pmodoled_device型的指針。
首先定義一系列指針,后續作為句柄使用。
獲取struct spi_master描述塊的指針,并賦值給spi_master。后續作為句柄使用。
spi_busnum_to_master()負責獲得這個描述塊的指針,它利用傳入的spi_id,在系統中查找描述塊,從而獲得指針。
判斷spi_master的合法性。
如果為NULL,則非法。打印錯誤信息,直接return。
如果不為NULL,則繼續執行。
分配一個SPIDEVICE描述塊。
spi_alloc_device()負責在系統中分配一個SPIDEVICE描述塊,并返回一個struct spi_device型的指針。將指針賦值給spi_device,它是一個struct spi_device型的指針。后續作為句柄使用。
判斷spi_device的合法性。
如果為NULL,則非法。首先在SPIMASTER上登記一個P操作,然后打印錯誤信息,直接return。
put_device()負責在一個設備資源的隊列上登記一個P操作。
如果不為NULL,則繼續執行。
填充SPIDEVICE。
chip_select,max_speed_hz,mode,bits_per_word,controller_data,dev.platform_data,
modalias。
把填充好的SPIDEVICE注冊到系統中去。
spi_add_device()負責將SPIDEVICE描述塊注冊到系統中去。然后返回狀態值。
判斷返回狀態值。
如果非法,則首先在SPIDEVICE上登記一個P操作,然后打印錯誤信息,直接return.
spi_dev_put()負責在一個SPI設備資源的隊列上登記一個P操作。
如果合法,則繼續執行。
將注冊好的SPIDEVICE描述塊,關聯到PMOD。
將spi_device指針賦值給PMOD的spi成員,使之定向到SPIDEVICE描述塊。
在SPIMASTER上登記一個P操作。
put_device(&spi_master->dev);
至此,全部執行完,return.
總結
以上是生活随笔為你收集整理的添加内核驱动模块(2)(mydriver.c+ Konfig+Makefile )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Zigbee 协议栈网络管理
- 下一篇: 单片机外文参考文献期刊_单片机_英文参考