regmap是Linux內(nèi)核新引進(jìn)的一套控制總線通用接口,初始版本應(yīng)該出現(xiàn)在Linux-3.1。什么是控制總線?嵌入式系統(tǒng)最常見的是I2C和SPI,這大家應(yīng)該非常熟悉。 在regmap出現(xiàn)之前,當(dāng)設(shè)備驅(qū)動(dòng)使用I2C或SPI總線進(jìn)行控制時(shí),都要寫一堆device/driver/boardinfo,然后再注冊(cè)進(jìn)去。具體范例可以參考:驅(qū)動(dòng)模塊使用I2C總線范例。僅僅注冊(cè)就非常繁瑣了,更不用提讀寫接口不是一致的。 而regmap把硬件細(xì)節(jié)抽象起來,它不管你底層是I2C還是SPI,讀寫接口都是一樣的。你所需要做的就是:1)配置好struct regmap_config,包括reg_bits(寄存器地址寬度)、val_bits(寄存器值寬度)、num_reg_defaults(寄存器數(shù)目)等等信息;2)注冊(cè)接口時(shí),根據(jù)接口類型使用不同的函數(shù),I2C用regmap_init_i2c(),SPI用regmap_init_spi()。除了使用方便以外,還可以在線調(diào)試,只要你將debugfs掛載上去,就可以在線讀寫設(shè)備的控制接口,這點(diǎn)第2小節(jié)詳細(xì)介紹下。 Linux內(nèi)核版本:3.4.5 |
|