"./drivers/i2c/busses/i2c-s3c2410.c"是3.14.0內(nèi)核中三星SoC的i2c控制器驅(qū)動程序, 本文試圖通過對這個程序的分析, 剝離繁復(fù)的細(xì)節(jié), 總結(jié)一套編寫i2c主機(jī)控制器驅(qū)動的框架以及一個分析內(nèi)核驅(qū)動的流程.

匹配之前

1287 static int __init i2c_adap_s3c_init(void)1288 {1289         return platform_driver_register(&s3c24xx_i2c_driver);1290 }1291 subsys_initcall(i2c_adap_s3c_init);

--1291-->將主機(jī)控制器驅(qū)動在系統(tǒng)啟動的時候就注冊好
--1289-->這個驅(qū)動是基于platform總線的, 設(shè)備信息的部分在板級文件i2c_board_info中描述并作為platform_device隨內(nèi)核啟動被注冊, 所以控制器驅(qū)動在系統(tǒng)啟動的時候就可以工作了

1275 static struct platform_driver s3c24xx_i2c_driver = {1276         .probe          = s3c24xx_i2c_probe,1277         .remove         = s3c24xx_i2c_remove,1278         .id_table       = s3c24xx_driver_ids,1279         .driver         = {1280                 .owner  = THIS_MODULE,1281                 .name   = "s3c-i2c",1282                 .pm     = S3C24XX_DEV_PM_OPS,1283                 .of_match_table = of_match_ptr(s3c24xx_i2c_match),1284         },1285 };

既然是遵循的platform編寫, 那么所有的信息都要在一個platform_driver中描述, 分析也是圍繞這個對象展開

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式