else {
init_MUTEX(&sem);
init_waitqueue_head(&outq); ? }
2)获取信号量和并判断是否加入队列 在globalvar_read()中获取
if(wait_event_interruptible(outq,flag != 0)) return –ERESTARTSYS;
if(down_interruptible(&sem)) return –ERESTARTSYS;
flag = 0; ? up(&sem);
3)在globalvar_write()中唤醒队列
if(down_interruptible(&sem)) return –ERESTARTSYS; ?
up(&sem); flag = 1;
wake_up_interruptible(&outq); 4)编写应用test1.c test2.c进行测试。 5)提交代码和测试结果(参照实验2方式)。
四,中断练习
1)
void tast_tasklet_action(unsigned long t) {
printk(\
}
2)DECLARE_TASKLET(test_tasklet,test_tasklet_action, 0); 3) tasklet_schedule(&test_tasklet); 4)编写应用test1.c test2.c进行测试。 5)提交代码和测试结果(参照实验2方式)。 二.waitqueue.c驱动程序 makefile文件
解释代码
实验五
实验题目:ADC设备驱动开发
实验目的:了解s3c2410 ADC 芯片相关寄存器功能;编写驱动和应用程序对ADC进行配置及读取数据。学会交叉编译环境的搭建。 实验类型:综合 实验要求:必修 仪器设备:计算机 实验内容、方法、步骤:
编写一个ADC设备驱动程序,能够对ADC设备配置及读取数据。将设备驱动程序和应用程序下载到实验箱,测试并写出运行程序后输出的结果。 1)
交叉编译环境的搭建。
a) 将armv4l-tools-2.95.2.tar.bz2复制到根目录 cp armv4l-tools-2.95.2.tar.bz2 / b) 解压工具包
tar jxvf armv4l-tools-2.95.2.tar.bz2 c) 配置环境变量 vim /root/.bashrc
输入:export PATH = $PATH:/opt/host/armv4l/bin