1、char **argv = char* argv[ ],为字符串数组。
2、size_t 为 unsigned long/int 类型。ssize_t 为 long/int 类型。 loff_t 为 long long 类型。
3、结构体定义乱序赋值(结构体初始化)
static struct file_operations led_fops =
{
.owner = THIS_MODULE,
.open = led_open,
.read = led_read,
.write= led_write,
.release = led_release,
};
4、设备注册时,必须使用主设备号和次设备号,前者标识一个特定的驱动程序,后者用作标识使用该驱动程序的各设备(设备列表中的数组索引),因为同一个驱动可处理多个设备,而不同的驱动程序可以处理相同类型的不同设备。
5、struct inode *inode;//索引节点
我们必须找到一个地方储存文件的元信息,文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。
6、struct file *filp;//文件结构体
struct file结构体定义在include/linux/fs.h中定义。文件结构体代表一个打开的文件,系统中的每个打开的文件在内核空间都有一个关联的 struct file。
7、filp->private_data = &dtsled; /* 设置私有数据 */
我个人理解:首先,open、clsoe等底层驱动函数,是在设备对应的驱动文件中定义的。然后,上层应用程序调用open函数,就会调用对应设备驱动的open函数,也就是上面的open函数,第一个参数是驱动文件的索引节点,第二个参数是打开的驱动文件。这个private_data 其实是用来保存自定义设备结构体的地址的,自定义结构体的地址被保存在private_data后,可以在read ,write 等驱动函数中传递和调用自定义设备结构体中的成员。
8、depmod(depend module)检测模块的相依性,供modprobe在安装模块时使用。
9、修改文件所有者和所属组:
10、在VScode中无法修改文件名,考虑是文件权限问题,是当前修改文件所属人和所属组权限有问题,还是当前文件所在文件夹所属人和所属组权限有问题。
11、原子整形操作API函数中atomic_dec_and_test的声明如下:
该函数操作完成之后,不只是判断原子变量减去1之后是否等于0,原子变量自身会减去1,可以参考这个。
12、驱动开发下载程序到开发板上,运行测试程序报错:line 1: syntax error: unexpected word (expecting ")"),解决方法详见这里。
13、VSCode中.vscode下面应该是只能由有.jason文件,不能放.c文件,不然无法编译。
14、source insight中.s、.dts文件diamagnetic黑白,并没有高亮显示解决方法:
15、驱动加载成功需要在/dev 目录下创建一个与之对应的设备节点文件,应用程序就是通过操
作这个设备节点文件来完成对具体设备的操作。
16、成功唤醒一个wait_event_interruptible()进程需要满足两个条件:
1)condition为真, 2)调用wake_up()。详见这里。
17、VS2019+Matlab2018b联用,参考这里,16.0对应的数值为改数值的时候就改为VS安装路径
18、opencv动态链接库32位、64位用哪个加那个,都加入可能容易报错。
19、vs+Qt切换编译器:
20、Filezilla配置ip、密码等,虚拟机Net模式,设置Net可以联网基本就可以传输文件(修改虚拟网络编辑器即可,最好按照Net模式联网CSDN文章完成联网,其实不联网也可以)