了解Linux目录结构
参考:https://www.cnblogs.com/mik-hello/p/15203716.html
新增设备驱动源码
参考3.4.2
1、在driver/ 对应子目录下心中设备驱动源码,或者在 arch/arm/mack-xxx新增板级支持的代码
2、修改同目录下的Kconfig配置脚本
3、修改同目录下的Makefile脚本
//-------hello.c------------------------
#include <linux/init.h>
#include <linux/module.h>
static int __init hello_int(void){
printk(KERN_INFO " hellow world init\n");
return 0;
}
module_init(hello_int);
static void __exit hello_exit(void){
printk(KERN_INFO " hellow world exit\n");
}
module_exit(hello_exit);
MODULE_AUTHOR("fwy");
MODULE_LICENSE("GPL v2");
MODULE_DESCRIPTION("111222 for test");
MODULE_ALIAS("a test module");
//-------Makefile------------------------
ifeq ($(KERNELRELEASE),)
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
.PHONY: modules modules_instal clean
else
obj-m := hello.o
endif
modinfo命令
——查看模块的详细信息
modinfo hello.ko
module_param
——设置模块加载时的参数, 支持多个参数,
参数的内容,也可以通过 /sys/module/verify/parameters目录查看
static int test_id = 0;
static char *test_mod_name = "CPU"
module_param(test_id, int, S_IRUGO);
module_param(test_mod_name , charp, S_IRUGO);
static int __init hello_int(void){
printk(KERN_INFO " verify init, test_id=%d, module_name=%s\n",test_id,test_mod_name);
return 0;
}
module_init(hello_int);
程序执行 sudo insmod verify.ko test_id=5 test_mod_name="ISP"
dmesg:
[265283.099556] verify init, test_id=5, module_name=ISP
pamameters目录下的文件:
(备注: 模块被卸载时,该文件会被删除)
导出符号
EXPORT_SYMBOL_GPL导出符号
int reg_set(int reg_addr, int reg_data){
return reg_data;
}
int reg_read(int reg_addr){
return 0;
}
EXPORT_SYMBOL_GPL(reg_set);
EXPORT_SYMBOL_GPL(reg_read);
在 proc/kallsyms文件里可以找到对应的导出符号。
grep xxx /proc/kallsyms : 在文件中查找xxx
Linux文件系统
根目录“/”
查看/proc/devices文件可以获知系统中注册的设备,第1列为主设备号,第2列为设备名
查看/dev目录可以获知系统中包含的设备文件,日期的前两列给出了对应设备的主设备号和次设备 号
sysfs(系统文件系统)
顶层目录结构:
block目录包含所有的块设备;
devices目录包含系统所有的设备,并根据设备挂接的总线类型组织成 层次结构;
bus目录包含系统中所有的总线类型;
class目录包含系统中的设备类型(如网卡设备、声卡设 备、输入设备等)