在线问答
直播中

zhengxiaoan

9年用户 14经验值
擅长:嵌入式技术 控制/MCU RF/无线
私信 关注

【OK210试用体验】之Linux下简单字符驱动程序

       大家好,今天跟你们分享一个简单字符驱动程序。
      
1.首先简单了解一下


      在Linux系统中设备分为三种类型:字符驱动、块设备驱动和网络接口设备。字符设备是指那些只能一个字符一个字符按照先后顺序进行读写的设备。而块设备是指那些可以从设备的任意位置读取指定长度数据的设备,不必按照先后顺序进行读取。
     常见的字符设备有鼠标、键盘、串口等,常见的块设备有硬盘、U盘、SD卡、光盘等。在Linux中用ls -l命令可以看到第一列的开头字母为c的就是字符设备(character),开头字母为b的就是块设备(block)。
       然而Linux 驱动程序分为两种形式:一种是直接编译进内核,另一种是编译成 module 形式,然后在需要该驱动 module 时手动加载。对于前者,还有待学习。Module 形式的驱动, Linux 提供了两个命令用来加载: modprobe 和 insmod (本帖用后者)。使用 insmod 加载驱动 module 时,需要让驱动 module 为设备做一些初
始化动作,主要目的是让 Linux 内核知道这个设备 ( 或者说 module?) ,以及在以后对该设备进行操作(如 open , read ,write 等等)时,
Linux 内核知道,本 module 拥有哪些函数可以服务于系统调用。 每个重要的模块都需要一个清除函数,该函数在模块被移除前注销接口并向系统中返回所有资源。如果一个模块未定义清除函数,则内核不允许卸载该模块。
     其次知道module_init( ) 和 module_exit(
) 为相对应的一对系统调用。

2.所需源代码

@内核源码 linux-2.6.35.7tgz;
@12.c(简单自作的字符驱动源码);

3.字符驱动程序步骤


(1)首先解压好内核源码,打开终端


进入drivers/char/目录下 0SD0ZUV(}X1D55VMEAL~_@4.png

建立一个12.c文件       MK86`09J}MEMG[R_WQC{3[6.png

文件12.c的内容如下    %]}`5MN478WSL${A[82~201.jpg


(2)在内核源码处添加12.c驱动的支持   
[color=black !important]   

[color=black !important]修改drivers/char 目录下的Kconfig文件, XV[LR}%G`2~3`EP@QD%~OT0.png
[color=black !important]

[color=black !important]添加如下内容         }ZMRKS([LQ2_MD11V[XX[%1.png     N}YUAYTOVE2(S(C74@X_J0I.jpg


(3)修改drivers/char 目录下的Makefile文件 命令#gedit Makefile  
   
添加如下内容          9A(6IMGMN[K~5%QVAD{HY5F.png


(4)进入内核根目录下配置内核,命令#cd /opt/linux-2.6.35.7-gec-v3.0
输入#make menuconfig


                     C0%@68GCF60XHSQ@HYP(T.jpg

按空格键进入          $XNO]0@MJY9IREFP@LV@$[Y.png


按空格键进入          }UQN6L7LSLBY5X4H2RV_6.jpg


(5)设置为动态后,退出并保存




(6)使用命令 make modules    PA5ZAT4EB[H5UC`N07LQXF7.png
(7)在drivers/char/ 目录下面会生成一个12.ko的文件 }]2)W{3AOJ%`[X_%X}9SSNY.png

  (8)将它复制到开发板下,用命令insmod 12.ko挂载驱动   
    就可以看到结果。

  • _U`64Z3~@RNQ{TN@VM80XO8.png
  • 9MZVPJU7GKA4LKP86WB[R17.jpg
  • PA5ZAT4EB[H5UC`N07LQXF7.png

回帖(2)

zhengxiaoan

2015-7-22 23:39:20
这里说明一下一般按正常的逻辑,搭建开发环境完之后,就该接着学习一个helloworld的内核模块,然后才来学习字符驱动程序,但是我这里就不重复写了,
举报

郎中令2000年

2015-7-23 00:21:49
还没有学到驱动,不过看起来很有意思!谢谢分享!
1 举报

更多回帖

发帖
×
20
完善资料,
赚取积分