1)在i2c驅動模組中定義實際呼叫的函式
void read_i2cinfo_from_proc(void)
2)在i2c模組(如i2c演算法驅動模組)初始化時建立乙個proc entry
create_proc_read_entry("readi2cinfo", 0, 0, read_i2cinfo_from_proc, null);
//readi2cinfo為/proc目錄中的檔案名字
//read_i2cinfo_from_proc是實際呼叫的函式,在1)中定義
3)在使用者空間檢視當前i2c暫存器的值
$cat /proc/readi2cinfo
1,註冊 intregister_chrdev(unsigned int major, const char *name,
struct file_operations *fops);
其中,major是為裝置驅動程式向系統申請的主裝置號,如果為0則系統為此驅動程式動態地分配乙個主裝置號。name是裝置名。fops就是前面所說的對各個呼叫的入口點的說明。此函式返回0表示成功。
返回-einval表示申請的主裝置號非法,一般來說是主裝置號大於系統所允許的最大裝置號。返回-ebusy表示所申請的主裝置號正在被其它裝置驅動程式使用。
如果是動態分配主裝置號成功,此函式將返回所分配的主裝置號。如果register_chrdev操作成功,裝置名就會出現在/proc/devices檔案裡。
在成功的向系統註冊了裝置驅動程式後(呼叫register_chrdev()成功後),就可以用mknod命令來把裝置對映為乙個特別檔案,其它程式使用這個裝置的時候,只要對此特別檔案進行操作就行了
2,註冊:misc_register,註冊雜項字元裝置,該類裝置使用同乙個主裝置號10,函式中會自動建立裝置節點,即裝置檔案。無需mknod指令建立裝置檔案。因為misc_register()會呼叫class_device_create()或者device_create()。
static int asrc_major;
static struct class *asrc_class;
asrc_major =register_chrdev(asrc_major, "mxc_asrc", &asrc_fops);
if (asrc_major < 0)
asrc_class =class_create(this_module, "mxc_asrc");
if (is_err(asrc_class))
temp_class =device_create(asrc_class, null, mkdev(asrc_major, 0),
null, "mxc_asrc");
在驅動初始化的**裡呼叫class_create為該裝置建立乙個class,再為每個裝置呼叫 class_device_create建立對應的裝置
struct class *myclass = class_create(this_module, 「my_device_driver」);
class_device_create(myclass, null, mkdev(major_num, 0), null, 「my_device」);
static const struct file_operations proc_dma_operations = ;
static int __init proc_dma_init(void)
Linux筆記(四) Linux核心
2 檔案系統 2.2 檔案系統 處於執行期的程式及其所包含 的總稱。獲取程序識別符號的系統呼叫。函式原型 include include pid t getpid void 返回當前程序的pid pid t getppid void 返回父程序的pid uid t getuid void 返回當前程...
linux核心 聽課筆記
size x large 核心空間 使用者空間 size 通過 color red 系統呼叫和硬體中斷 color 完成從使用者空間到核心空間的轉移 img size x large 核心七大組成 size sci 為使用者空間提供 color red 標準的系統呼叫函式 color pm 程序排程...
linux核心筆記(一)
需要了解知識 linux c語言makefile linux是單核心 或單核心 的操作體系統。windows微核心 單核心是所有的核心功能被整體編譯在一起,形成乙個單獨的核心映象,核心中各模組的互動是通過直接的函式呼叫,效率非常高。微核心是實現核心中相當關鍵和核心的一部分,其他功能模組被單獨編譯,功...