Linux 嵌入式驱动开发 -- 环境搭建及模块编程初步

来源:互联网 发布:淘宝有哪些官方手办店 编辑:程序博客网 时间:2024/05/20 12:48

 接触linux驱动开发有一段时间了,一直都没有好好回顾下自己的学习过程,现在觉得非常有必要将自己的学习

经历和过程表述出来,一来主要让自己理顺下学习的每一阶段的总结,二来也有可能能帮助到尚未接触到linux

驱动开放但总要接触到这个领域的筒子,在这里希望能与他们共勉!好,下面开始我的菜鸟制作

这些年接触了好几种编程语言,都有这么一个体会,上来二话不说先把经典的hello world 跑起来!相信各位也

是这样的,但其实要跑起 helloworld 也是经历了好些过过程的:

1:环境的搭建和配置

2:hello world 程序的编写

3:使用编译命令编译,最后执行

那在这里我也按照这个顺序来开始我们的linux嵌入式(这里的嵌入式设备以arm 6410为例)驱动编程:

首先是环境搭建, 环境包括交叉编译器和linux内核树,还有开放板。我这里是基于arm平台的开放,

所以交叉编译器是arm-linux-gcc, 安装交叉编译器需要下载其工具包 arm-linux-gcc-x.x.x.tar.bz2,使用命令

 tar -xvf arm-linux-gcc-x.x.x-tar.bz2 -C /usr/local/arm/  把编译器工具解压到环境目录下,在把工具包bin路径

加入到 $PATH环境变量里,编辑~/.bash_profile,在最后加入一行 PATH=/uar/local/arm/bin:$PATH ,然后

执行命令 source ~/.bash_profile ,这样就可直接使用 arm-linux-gcc 工具了!

接下来就是构建linux内核树,这个其实就是下载linux内核的某个主线源码包(这里以linux-2.6.28版本

为例) linux-x.x.x.tar.bz2同样使用命令 tar -xvf linux-x.x.x-tar.bz2 解压,解压完成后进入linux-x.x.x 目录,

 执行命令 make zImage 开始编译,当然执行这步之前视平台不同要修改Makefile的一些配置,这里修改两处:

ARCH:= arm

CROSS_COMPILE:= arm-linux-

编译结束也就是内核树构建完成!好到此为止,最复杂的环境搭建已经完成!

  接下来就是hello world程序的编写,以下是源码 hello.c:

#include <linux/init.h>#include <linux/module.h>static int __initi hello_init(void){      printk("hello kernel .\n");      return 0;}static void __exit hello_exit(void){      printk("bye bye .\n");}module_init(hello_init);module_exit(hello_exit);MODULE_LICENSE("GPL");


  最后制定编译规则,即编写Makefile,其代码如下:

obj-m    := hello.oKERN = /usr/src/linux-2.6.28/ #内核树目录all:     make -C $(KERN) M=`pwd` modulesclean:      make -C $(KERN) M=`pwd` modules clean

  接下来就是执行编译 make ,当前目录就会生成hello.ko, 到开放板插入模块,执行 insmod hello.ko

就能得到结果 

hello kernel

删除模块 rmmod hello (这里不用加.ko)结果是

byebye

  到这里,我们的环境搭建和hello world 开放完成!