![Linux内核裁减和驱动程序开发_第1页](http://file4.renrendoc.com/view/ae43ce92d8f9d296acdfc06c3a9fe365/ae43ce92d8f9d296acdfc06c3a9fe3651.gif)
![Linux内核裁减和驱动程序开发_第2页](http://file4.renrendoc.com/view/ae43ce92d8f9d296acdfc06c3a9fe365/ae43ce92d8f9d296acdfc06c3a9fe3652.gif)
![Linux内核裁减和驱动程序开发_第3页](http://file4.renrendoc.com/view/ae43ce92d8f9d296acdfc06c3a9fe365/ae43ce92d8f9d296acdfc06c3a9fe3653.gif)
![Linux内核裁减和驱动程序开发_第4页](http://file4.renrendoc.com/view/ae43ce92d8f9d296acdfc06c3a9fe365/ae43ce92d8f9d296acdfc06c3a9fe3654.gif)
![Linux内核裁减和驱动程序开发_第5页](http://file4.renrendoc.com/view/ae43ce92d8f9d296acdfc06c3a9fe365/ae43ce92d8f9d296acdfc06c3a9fe3655.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux内核裁减和驱动程序开发主要内容ARMLinux环境说明Linux内核裁减LinuxGPIO驱动编写LinuxADC驱动编写ARMLinux环境说明Linux内核:linux-.tar.bz2Linux根文件系统:rootfs.tar.bz2Linux开发环境及编译器:PACKAGES.ISOarm-linux-gcc-4.4.1.tar.bz2Linux内核裁减
-如何裁减Makemenuconfig选择那些需要用的内核模块和驱动模块Linux内核裁减
-建立交叉编译环境获取交叉编译链:/sgpp/lite/arm/portal/subscription3057目前最新为:SourceryG++Lite2009q3-67forARMGNU/Linux调整编译链:默认选择的库是ARMv5TE-Little-Endian,Soft-Float,GLIBC,但是我们需要的是ARMv4T的库,因此可使用选项-march=armv4t指定libc/armv4t/lib添加libjpeg,libpng,libz和libuuid(e2fprogs)库到对应的libc/armv46/lib和libc/usr/include里。以支持Qtopia的编译。Linux内核裁减
-获取内核源码查看最新版本Linux内核更新信息:/Linux_2_6_32
下载对应内核代码:/pub/linux/kernel/v2.6/linux-.tar.bz2
Linux内核裁减
-定制Linux内核修改Makefile来支持ARM平台,将”ARCH?=(SUBARCH)”和”CROSS_COMPILE?=“改为”ARCH=arm”和”CROSS_COMPILE=arm-linux-”。makemenuconfig加载默认配置单文件arch/arm/configs/mini2440_defconfig添加自己的信息:Generalsetup->Localversion->QiuShi其中Mini2440的机器码为:1999.在arch/arm/tools/mach-types。将s3c2440对应机器码修改为1999修改NAND分区:arch/arm/mach-s3c2440/mach-smdk2440.cLinux内核裁减
-定制Linux内核添加yaffs文件系统支持:注意对于128MB大容量NAND需要页大小来支持制作文件系统镜像文件工具mkyaffs2image需要支持128MBLinuxGPIO驱动编写
-拨码开关驱动打开内核源码文件\drivers\char\2440_buttons.c这是char驱动是控制gpio的驱动LinuxGPIO驱动编写定义驱动名称#defineDEVICE_NAME"buttons"动态创建设备节点/dev/buttons应用程序使用设备Open(“/dev/buttons”,O_RDWR)LinuxGPIO驱动编写staticstructbutton_irq_descbutton_irqs[]={{IRQ_EINT0,S3C2410_GPF(0),S3C2410_GPF0_EINT0,0,"KEY0"},{IRQ_EINT1,S3C2410_GPF(1),S3C2410_GPF1_EINT1,1,"KEY1"},{IRQ_EINT2,S3C2410_GPF(2),S3C2410_GPF2_EINT2,2,"KEY2"},{IRQ_EINT3,S3C2410_GPF(3),S3C2410_GPF3_EINT3,3,"KEY3"},{IRQ_EINT4,S3C2410_GPF(4),S3C2410_GPF4_EINT4,4,"KEY4"},{IRQ_EINT5,S3C2410_GPF(5),S3C2410_GPF5_EINT5,5,"KEY5"},{IRQ_EINT6,S3C2410_GPF(6),S3C2410_GPF6_EINT6,6,"KEY6"},{IRQ_EINT8,S3C2410_GPG(0),S3C2410_GPG0_EINT8,7,"KEY7"},{IRQ_EINT9,S3C2410_GPG(1),S3C2410_GPG1_EINT9,8,"KEY8"},};LinuxGPIO驱动编写staticstruct
file_operations
dev_fops={.owner=THIS_MODULE,.open=s3c24xx_buttons_open,.release=s3c24xx_buttons_close,.read=s3c24xx_buttons_read,.poll=s3c24xx_buttons_poll,.ioctl=s3c2410_buttons_ioctl,};file_operations设备使用方法这个结构的每一个成员都对应着一个系统调用。读取file_operation中相应的函数指针,接着把控制权转交给函数,从而完成了Linux设备驱动程序的工作。int(*open)(structinode*,structfile*);ssize_t(*read)(structfile*,char__user*,size_t,loff_t*);ssize_t(*write)(structfile*,constchar__user*,size_t,loff_t*);int(*ioctl)(structinode*,structfile*,unsignedint,unsignedlong);LinuxGPIO驱动编写staticstructmiscdevicemisc={ .minor=MISC_DYNAMIC_MINOR, .name=DEVICE_NAME, .fops=&dev_fops,};LinuxGPIO驱动编写staticint__initdev_init(void){ intret; ret=misc_register(&misc); printk(DEVICE_NAME"\tinitialized\n"); returnret;}LinuxGPIO驱动编写staticvoid__exitdev_exit(void){ misc_deregister(&misc);}LinuxGPIO驱动编写module_init(dev_init);module_exit(dev_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("QiuShiInc.");LinuxGPIO驱动编写driver/char/Kconfig告诉makemenuconfig如何裁减LinuxGPIO驱动编写driver/char/Makefile告诉编译器如何编译LinuxGPIO驱动编译回到内核根目录Makemenuconfig退出保存makemodules在drivers/char/目录下生成mini2440_buttons.ko复制到开发版中LinuxGPIO驱动加载在开发中使用:insmodmini2440_buttons.ko加载驱动使用:rmmodmini2440_buttons.ko卸载驱动LinuxGPIO驱动使用#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/ioctl.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<sys/select.h>#include<sys/time.h>#include<errno.h>LinuxGPIO驱动使用int
main(void){
int
buttons_fd; charbuttons[9]={'0','0','0','0','0','0','0','0','0'};
buttons_fd=open("/dev/buttons",0); if(buttons_fd<0){
perror("opendevicebuttons"); exit(1); } for(;;){ charcurrent_buttons[9];
int
count_of_changed_key;
inti; if(read(buttons_fd,current_buttons,sizeof
current_buttons)!=sizeof
current_buttons){
perror("readbuttons:"); exit(1); }
LinuxGPIO驱动使用
for(i=0,count_of_changed_key=0;i<sizeofbuttons/sizeofbuttons[0];i++){ if(buttons[i]!=current_buttons[i]){
buttons[i]=current_buttons[i];
printf("%skey%dis%s",count_of_changed_key?",":"",i+1,b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 借款合同印花税税率借款合同
- 营销顾问服务合同协议书
- 工程招投标与合同管理大学
- 高科技产品研发生产合同
- 涂层材料对主被动一体化热防护效果影响的实验研究
- 复杂电子对抗中的组网雷达功率分配与干扰智能识别及对抗研究
- 《动物的激素调节》课件
- 2025年西师新版七年级生物上册阶段测试试卷含答案
- 2025年中图版九年级历史下册阶段测试试卷
- 2025年浙教版七年级历史下册月考试卷
- 包装品质彩盒外箱知识课件
- 神经外科课件:神经外科急重症
- 颈复康腰痛宁产品知识课件
- 2024年低压电工证理论考试题库及答案
- 微电网市场调查研究报告
- 《民航服务沟通技巧》教案第14课民航服务人员上行沟通的技巧
- MT/T 538-1996煤钻杆
- 小学六年级语文阅读理解100篇(及答案)
- CB/T 467-1995法兰青铜闸阀
- 气功修炼十奥妙
- 勾股定理的历史与证明课件
评论
0/150
提交评论