构建第一个驱动程序(一)之Linux环境配置
构建第一个驱动程序(一)之Linux环境配置
一、超级终端的使用
软件:hypertem超级终端
打开软件后弹出
点击“取消” 弹出
点击“ 是” 弹出“新建连接”
填写名称 点击 “确定”,又弹出之前的位置信息,忽略他。
直到弹出“连接到”
选择你自己板子连接的串口,我的是COM4
确定后,按下图设置
,按下任意键顺利出现
连接成功。
二、交叉编译环境的安装及配置
首先下载交叉编译工具链,这里提供笔者使用的ARM-Linux GCC 4.4.3
下载地址:http://www.arm9.net/mini2440-linux.asp
文件名:ARM-Linux GCC 4.4.3.tar.gz
光盘里也有提供
1.把arm-linux-gcc-4.4.3.tar.gz拷贝到任意文件夹下
2.运行
$ sudo tar xvzf
arm-linux-gcc-4.4.3.tar.gz -C /解压该压缩包。
3.在/usr/local目录下建立arm路径
$ sudo mkdir
/usr/local/arm
将/opt/FriendlyARM/toolschain/4.4.3文件夹全部拷贝到/usr/local/arm下
$ sudo cp -r
/opt/FriendlyARM/toolschain/4.4.3/usr/local/arm
4.修改环境变量,把交叉编译器的路径加入到PATH
这里提供通用的方法之一
命令“gedit /root/.bashrc”
export
PATH=$PATH:/usr/local/arm/4.4.3/bin
然后运行
注销下,重新登陆
然后检查环境变量添加是否成功
$ echo
$PATH
查找是否已经将环境变量添加成功。
如果成功
运行
$ arm-linux-gcc
-v
查看是否输出arm-linux-gcc的版本号,
如果正确,交叉编译环境应该就安装完成了。
三、内核树的构建
若想要在虚拟机上的Linux上编译成功的“.ko”文件能够在mini2440 上成功加载,那么在Linux上的编译内核需要和板子上的内核一致。买板子的时候他们已经给过源码了。
在光盘linux目录下,
Linux-2.6.32.2-mini2440-20130614.tar.gz
我们可以查看是否和板子上的源码对应。在超级终端中输入命令“uname -r”
和光盘给的一致。不一致的话就要升级内核,或寻找相应的源码。
读者应按照自己的实际情况,去开发板的官网下载相应的源代码。
1.本例中讲源代码拷贝到/tmp/linux/下,
2.在/opt/FriendlyARM/目录下创建mini2440文件夹
$ sudo mkdir /opt/FridendlyARM/mini2440 并进入该目录
$ cd /opt/FridendlyARM/mini2440
解压源代码
$tar xvzf
/tmp/linux/linux-2.6.32-mini2440-20130610.tar.gz
3.配置编译文件
$ cd
/opt/FriendlyARM/mini2440/linux-2.6.32.2
$ cp config_mini2440_t35 .config
配置内核
$ make
menuconfig
会弹出可视化的界面
选择Load an Alternate Configuration File(在倒数第二行),确定后,保存,退出。
到这里编译内核树的准备工作还有最重要的一项。由于这里的内核是基于arm架构的,所以在编译的过程中需要使用到之前配置的交叉编译环境即arm-linux-gcc等。而内核源代码中的Makefile文件中的编译工具的地址需要修改为本机配置的具体地址。
4.makefile文件修改
在/opt/FriendlyARM/mini2440/linux-2.6.32.2下运行
$ sudo gedit ./Makefile 注意M为大写,编辑器你随意。。。
搜索arm-linux得到一个结果
CROSS_COMPILE?= arm-linux-
然后搜索CROSS_COMPILE,找到
AS= $(CROSS_COMPILE)as
LD= $(CROSS_COMPILE)ld
CC=
$(CROSS_COMPILE)gcc
CPP= $(CC) -EAR=$(CROSS_COMPILE)ar
NM=
$(CROSS_COMPILE)nm
STRIP= $(CROSS_COMPILE)strip
OBJCOPY=
$(CROSS_COMPILE)objcopy
OBJDUMP=
$(CROSS_COMPILE)objdump
-------------------------------------------------------------
这里定义了交叉编译文件的位置本例中作如下修改
#AS= $(CROSS_COMPILE)as
AS =
/usr/local/arm/4.4.3/bin/arm-linux-as
#LD= $(CROSS_COMPILE)ld
LD =
/usr/local/arm/4.4.3/bin/arm-linux-ld
#CC= $(CROSS_COMPILE)gcc
CC =
/usr/local/arm/4.4.3/bin/arm-linux-gcc
CPP= $(CC) -E
#AR=
$(CROSS_COMPILE)ar
AR = /usr/local/arm/4.4.3/bin/arm-linux-ar
#NM=
$(CROSS_COMPILE)nm
NM = /usr/local/arm/4.4.3/bin/arm-linux-nm
#STRIP=
$(CROSS_COMPILE)strip
STRIP =
/usr/local/arm/4.4.3/bin/arm-linux-strip
#OBJCOPY=
$(CROSS_COMPILE)objcopy
OBJCOPY =
/usr/local/arm/4.4.3/bin/arm-linux-objcopy
到这里准备工作完成
5.编译内核
$ sudo make
$
sudo make modules
不出意料的话,到这里,内核树的编译也完成了。