linux设备
摘要:设备初始化时同样要执行一个device_register函数,该函数传入一个struct device *类型的指针,因此要定义一个struct device类型的变量作为我们的设备。 struct device结构体中init_name表示的是设备名,bus表示设备所处的总线,我们将这两项初始化。
阅读全文
linux总线
摘要:编写驱动程序: 这个程序很简单,只是在初始化的时候加载了一条总线,该总线的名字为“my_bus”,用insmod加载之后可以在/sys/bus目录下看到一个叫my_bus的目录,如下图: 进到my_bus目录之后用ls -l命令,可以看到devices和drivers是两个目录,但是这两个目录都是空
阅读全文
驱动名、设备名和设备文件名的关系
摘要:编写一个驱动文件的时候生成一个name1.ko文件,这个name1就是驱动名,使用insmod name1.ko指令之后,用lsmod能看见一个名为name1的驱动 在调用了alloc_chrdev_region函数或register_chrdev_region函数时传入的最后一个参数为设备名,如果
阅读全文
linux设备注册
摘要:一、分配cdev cdev表示字符设备,使用cdev_alloc函数,cdev_alloc函数原型如下; 得到cdev指针 二、初始化cdev 使用cdev_init函数,cdev_init的原型如下: 将字符设备和设备的操作集合绑定在一起。 三、注册cdev 注册cdev用cdev_add函数,原
阅读全文
linux设备文件
摘要:一、前言 在调用了alloc_chrdev_region函数或register_chrdev_region函数之后可以在/proc/devices中看到该设备的主设备号,比如我注册的hello模块的主设备号为1024,如下图: 现在使用lsmod能看到驱动名,使用cat /proc/devices能
阅读全文
linux驱动设备号
摘要:一、设备号基础 一般来说,使用ls -l命令在时间一列的前一列的数字表示的是文件大小,但如果该文件表示的是一个设备的话,那时间一列的前一列将有两个数字,用逗号分隔开,如下图: 前一个数字表示主设备号,后一个数组表示次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。 实际
阅读全文
将自己的模块编译进内核
摘要:一、编写驱动程序 将需要编译进内核的源代码编写好,我举个最简单的Hello World的例子: hello.c 该文件编译后生成hello.ko文件,在insmod hello.ko的时候会打印 *****hello init test***** ,在rmmod hello的时候打印 *****he
阅读全文
././include/linux/kconfig.h:4:32: fatal error: generated/autoconf.h: No such file or directory 解决办法
摘要:我在编写内核驱动模块的时候报了一个非常奇怪的错误,如下图: 在目录下看了一下确实没有发现这个文件,感觉很奇怪,因为我记得之前编译模块是没有错误的,所以不可能是我代码写的有问题。 查阅了资料很多说要清除配置重新生成.config之类的,我也照做了但是并没有什么卵用。 最后发现是因为我执行了make m
阅读全文