1、Linux 驱动编程
• 基本接口
• 常用函数
2、串口驱动
• 申请中断处理
• 串口数据读、写
主要工作:
• 编写串口驱动初始化、释放函数;
• 编写串口驱动接收数据函数;
• 编写串口驱动发送数据函数;
• 编写串口驱动中断处理函数;
• 编写串口访问应用程序;
• 使用模块方式编译驱动;
• 使用模块方式调试驱动;
• 实现基本的串口数据收发。
主要步骤:
• 填写函数:uart_init、uart_exit、uart_open、uart_ release,实现串口设备初始化、释
放、打开、关闭;
• 填写函数: irq_rev_uart、uart_write、uart_read,实现串口设备中断处理、读、写;
• 用 模 块 方 式 编 译 Linux 核 心 , 生 成 uart.ko , 启 动 目 标 板 Linux 核 心 , 用
insmod、rmmod 等命令操作模块;
• 用 printk 打印调试串口驱动,包括中断相应,读写等;
• 编写应用程序:uart.c,实现打开串口设备、读写等,把主机端由 comcute 发过来的
串口数据回传给主机;
• 将目标板上串口线连到串口 1;
• 编译应用程序 uart.c,实现和主机间的串口通讯。
部分代码:
串口设备初始化函数
int ret;
dev_t devno = MKDEV(uart_major, 0);
if(uart_major){
ret = register_chrdev_region(devno, 1, "uart");
}else {
ret = alloc_chrdev_region(&devno, 0, 1, "uart");
uart_major = MAJOR(devno);
}
if(ret < 0){ printk("Register chrdev region failed!\n"); return ret; }
cdev_init(&uart_cdev, &uart_fops);
ret = cdev_add(&uart_cdev, devno, 1);
if(ret){ printk("Add c device failed!\n"); return ret; }
uart = ioremap(S3C2410_PA_UART1, 0x4000);
device_init();
ret = request_irq(IRQ_S3CUART_RX1, irq_rev_uart, IRQF_DISABLED, "uart", NULL);
5