Linux内核裁减和驱动程序开发_第1页
Linux内核裁减和驱动程序开发_第2页
Linux内核裁减和驱动程序开发_第3页
Linux内核裁减和驱动程序开发_第4页
Linux内核裁减和驱动程序开发_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论