首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

arm驱动

驱动程序设计:
linux操作系统的驱动与bootloader的驱动区别:
要考虑与应用层的接口;
考虑多用户;
考虑其他协议;
设备驱动的作用:读数据,写数据;
初始化设备,读写设备;  将设备的数据分配给应用;  将应用的数据分配给设备;
操作系统中驱动和设备的关系是一一对应的;
应用和驱动的关系是一对多的;
内核的主要功能:进程管理,  内存管理,  文件系统,  设备控制,  网络;
linux驱动的分类:字符设备,  块设备,  网络设备;
大部分情况:主编号标识相应的驱动程序(现代linux允许多个驱动程序共享主编号), 次设备号标识哪个设备;
设备文件的cp sudo cp -a /dev/mouse /tmp/  (此时是fopen打开设备文件)
             $ sudo cp    /dev/mouse /tmp/  (此时是open打开设备)
linux设备驱动信息的查看:
/proc/devices 查看系统支持的字符设备和块设备驱动;
/proc/pci 查看系统的PCI设备;
/proc/ioports 查看设备的IO端口;
/proc/interrupts 查看正在使用的中断号,中断次数;
/proc/net/dev 查看网络硬件设备,包括被down的网卡;
/proc/kallsyms 查看模块符号;
/proc/jitimer 查看定时器;
dmesg 查看系统的启动信息,可以看到系统支持的一些驱动的打印信息;
lspci
lsusb -v
uname -a
ifconfig -a  查看所有网卡
模块不全是驱动,但大多数模块都是驱动;
那些函数可以在模块中使用,关于kernel的API,可以查看http://kernelbook.sf.net
模块的重新编译:
在/usr/src/linux下解压linux源码包;
拷贝配置文件:cp /boot/config-2.6.20-16.generic /usr/src/linux/.config;
重新编译内核:sudo make
在模块的工程目录下编译模块:make
模块的参数传递:
module_param(name, type, perm);
static int count;
module_param(count,int,0);
#insmod driver.ko count=10
#lsmod
#rmmod driver
模块的交叉编译(arm开发板):
重新编译2.6.17.14内核,把zImage传给开发板;
将module工程目录拷贝到rootfs/usr/module下;
将module里的Makefile的源码路径变成2.6.17.14内核所在路径;
重新编译sudo make;
应用层--->TELNET,FTP,EMAIL
运输层--->TCP,UDP
网络层--->IP,ICMP,IGMP
链路层--->设备驱动程序及接口卡
继承事业,薪火相传
返回列表