linux中probe函式傳遞引數的尋找(下)

2021-07-08 11:31:45 字數 2043 閱讀 1588

linux中probe函式傳遞引數的尋找(下)

通過追尋driver的腳步,我們有了努力的方向:只有找到spi_bus_type的填充device即可,下面該從device去打通,當兩個連通之日,也是任督二脈打通之時。先從裝置定義去檢視,在mach-smdk6410.c中定義了硬體裝置資訊,從這作為突破口。

/* for mx25lx*/

static void cs_set_level(unsigned line_id, int lvl) ;

static struct s3c64xx_spi_csinfos3c64xx_spi1_csinfo = ;

static int mx25lx_iosetup(struct spi_device*spi)

static struct mx25lx_platform_datamx25lx_info = ;

static struct spi_board_info __initdataforlinx6410_mc251x_info  = ,

};

struct platform_device s3c64xx_device_spi0= , };

static struct platform_device*smdk6410_devices __initdata = ;

其中platform_device定義為:

struct platform_device ;

初始化函式如下:

static void __initsmdk6410_machine_init(void)

其中的註冊板資訊的函式如下,後項引數為1,其中board_list為spi.c中定義的全域性變數,即:static list_head(board_list);。

int __init

spi_register_board_info(structspi_board_info const *info, unsigned n)

return0; }

其中結果成員如下:

先加鎖,然後將board_list加入鏈結中,在遍歷裝置,最關鍵的函式是:

static voidspi_match_master_to_boardinfo(struct spi_master *master,

structspi_board_info *bi)

spi_new_device作用是例項化乙個新裝置,定義如下:

struct spi_device *spi_new_device(structspi_master *master,

struct spi_board_info *chip)

returnproxy; }

拷貝了platform_data,即mx25lx_info。

其中的spi_alloc_device函式定義如下:

struct spi_device *spi_alloc_device(structspi_master *master)

spi->master= master;

spi->dev.parent= dev;

spi->dev.bus= &spi_bus_type;

spi->dev.release= spidev_release;

device_initialize(&spi->dev);

returnspi; }

在這個定義中將spi_bus_type和dev聯絡起來,不過此時還沒有我們定義的裝置資訊,裝置資訊在接下來的賦值中完成。

最後是spi_add_device,將裝置資訊提交。

int spi_add_device(struct spi_device *spi)

…… done:

mutex_unlock(&spi_add_lock);

returnstatus; }

最終完成將spi_bus_type與定義的device資訊聯絡起來。由於本人才疏學淺,不正確的地方,懇求大牛指正,在此表示感謝!

Linux驅動中,probe函式何時被呼叫

宣告 以下主要內容參考自 關於struct device driver結構中的probe探測函式的呼叫 用sourceinsight跟蹤 從driver register看起,此處我的這裡是 int driver register struct device driver drv klist ini...

Linux驅動中,probe函式何時被呼叫

關於struct device driver結構中的probe探測函式的呼叫 用sourceinsight跟蹤 從driver register看起,此處我的這裡是 int driver register struct device driver drv klist init drv klist d...

Liunx驅動中,probe函式何時被呼叫

眾所周知,專業的程式設計師都知道,程式入口通常為main 函式,而 驅動程式真正的入口是 probe 函式 我們看 第一步,就是從入口函式開始的,天才第一步,雀氏紙尿褲。從總 分 總的方式學會linux驅動 step1 驅動模組的載入 linux模組的載入手動載入 1 通過執行insmod命令 自動...