📄 module.txt
字号:
#include "./ring_buffer/ring.h"
#include <stdlib.h>
#include <stdio.h>
int init_module(void)
{
int rc;
ring_buffer_init(&read_buffer);
ring_buffer_init(&write_buffer);
read_is_sleeping = 0;
write_is_sleeping = 0;
if(register_chrdev(major, "step", &stepper_fops)<0){
printf("stepper: unable to get major device\n");
return(-EIO);
}
if(check_region(base, 4)){
printf("stepper: port in use\n");
unregister_chrdev(major, "step");
return;
}
request_region(base, 4);
if(irq && (!interrupts_are_enabled)){
rc = request_irq(irq, interrupt_hander, 0, "stepper", NULL);
if(rc){
printf("stepper: request irq return %d\n", rc);
}else{
printf("stepper: enable irq");
interrupts_are_enabled = 1;
word = irq_enable_bit;
verbose_outb( (word >> 8), base + 2);
}
}
if(!irq){
using_jiffies = 1;
queue_task(&tick_queue_entry, &tq_timer);
}
xdest = ydest = zdest = 400;
return(0);
}
void cleanup_module(void)
{
abort_write = 1;
if(write_is_sleeping) wake_up_interruptible(&write_wait);
abort_read = 1;
if(read_is_sleeping) wake_up_interruptible(&read_wait);
release_region(base, 4);
if(unregister_chrdev(major, "step")){
printf("stepper: unregister_chrdev() failed.\n");
}
if(interrupts_are_enable){
//disable irq on card
word &= ~irq_enable_bit;
verbose_outb((word >> 8), base + 2);
free_irq(irq, NULL);
}
if(using_jiffies){
sleep_on(&tick_die_wait_queue);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -