📄 readme.txt
字号:
这是09449的实例驱动程序,下面简单作一介绍:
driver.c 驱动程序源代码;
write.c 写应用测试程序;
read.c 读应用测是程序;
ioctl.c I/O控制测试程序;
driver.c 中的主要例程有read、write、interrupt、ioctl和test_read。write函数响应用户write函数,通过09449的DMA控制器完成DMA写操作;read函数响应用户read函数,通过09449的DMA控制器完成DMA读操作;DMA传输完成就会触发中断,系统会自动调用中断服务例程,在中断服务例程中判断中断源,给出提示信息,其中read函数在DMA传输开始后就进入睡眠,在中断服务例程中要将其唤醒;ioctl函数实现一个I/O控制的框架;test_read函数通过09449的I/O端口实现了读操作(其他读/写都通过I/O内存来实现)。具体实现参考源程序。
该目录下文件的编译、加载、调试过程与5933相似 。其中driver.c文件通过makefile文件编译生成driver.o;其他三个源文件都需通过手动编译,具体过程例如 gcc write.c -o write <entere>。
应用程序中write文件完成DMA写传输;read完成DMA读传输;ioctl函数是一个控制09449操作寄存器的函数框架,目前只能完成两项功能:<1> 读出中断能使/状态寄存器的值;<2> Reset芯片,使各控制寄存器的值恢复成默认值。其I/O函数的运行方式是<1> ./ioctl i <enter> <2> ./ioctl r <enter>。
注:首先要在设备文件目录/dev下建立一个节点应用程序才能调用。其命令为:knod /dev/09449device c major minor其中参数c表示该设备是字符设备,major是主设备号,minor是从设备号。主设备号可以在/proc/devices文件中找到,一般情况下是254,从设备号用0即可。
另注:09449的邮箱操作我没有完成,无非是在ioctl例程增加一个分支用于邮箱读写,在中断服务例程中增加一些响应邮箱中断的服务代码。其他传输方式我都进行过测试。
再注:即使我将中断能使位完全关闭,加载驱动后依然能收到一个固定的中断信号,然而此时读出来的中断控制/状态寄存器依然是0。我对底层硬件的理解还有限,搞不懂这些中断是哪里来的。为了能继续进行测试,我暂时将中断处理例程中的一些提示信息屏蔽了。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -