单片机要与硬件交互,单片机程序需要与内核进行通信,并且在此之前,它必须通知内核有关内核的存在。这是通过“init”调用实现的,通过该调用单片机程序在内核中注册并分配了所需的内存。在系统关闭时,将使用“exit”调用取消注册单片机程序,这还会释放单片机程序占用的所有资源。用于定义“init”和“exit”功能的调用是:
module_init(init_funcTIon_name);
module_exit(exit_funcTIon_name);
我们可以编写自己的init和exit函数,同时编写分别由上述两个调用设备的单片机程序。***简单的init函数如下:
staTIc int init_funcTIon_name(void)
{
printk(KERN_ALERT“ Hello”);
return 0;
}
同样,我们也可以编写退出函数。如您所见,为了获取内核日志,我们使用与C函数printf()类似的printk()函数,但需要一个可选的特殊日志级别字符串(此处为KERN_ALERT–日志级别1)来指示严重性类型错误消息。共有八个日志级别,默认值为KERN_WARNING(日志级别4)。
设备单片机程序中***重要的组件之一是文件 *** 作(简称“fops”)结构。此结构指定为其编写单片机程序的设备的功能。它包含指向为设备支持的 *** 作而编写的功能的指针。基本的fops结构可以描述如下:
static struct file_operations fops =
{
.read = my_read;
.write = my_write;
.open = my_open;
.release = my_release;
}
上面的定义是,每当设备必须读取某些内容时,都会调用my_read函数(由开发人员编写)。同样,指向其他功能的指针是针对它们提及的功能的相应名称。
如果要为其编写单片机程序的设备支持中断功能,则单片机程序必须在init函数中注册中断服务程序(ISR),只要在设备中收到中断,该函数就会被调用。这是通过使用需要中断处理程序的内核函数request_irq()来实现的,然后启用中断线以接收中断。另一方面,当单片机程序卸载时,内核函数free_irq()用于释放中断处理程序和中断行。
深圳市艾能微科技有限公司是一家致力于发展国产单片机方案开发的科技公司,在中国区主营电子产品方案开发、单片机技术开发及设计销售等服务,单片机厂家。代理:芯连心。有8位单片机,32位单片机,触摸单片机等。
审核编辑:符乾江
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)