【基于mini2440开发板的交叉编译环境及内核树配置.
在学习linux驱动开发过程中,交叉编译环境的配置及内核树的生成无疑是对linux不是十分了解的新人面前的一堵墙。高高大大的墙。。。
笔者在初探这一方向时,就在这2个问题上苦恼了很久。查阅无数资料,大多提到了一些问题的解决方案,但又与自己的情况略有不同而不能照搬。在无数次尝试之后最终成功编译了第一个arm架构的驱动模块。仅写此文给后来人一点帮助,提供一点思路。
由于笔者能力有限,资历尚浅,如果不足错误之处,望海涵并不吝赐教。
一.关于交叉编译环境及内核树的先后及关系
因为最终编译后的模块是运行在arm架构下,而开发板本身的计算能力不足,故需要在主机上安装交叉编译环境arm-linux-gcc来编译相关代码。
本帖中的内核树使用的源代码是适配mini2440开发板而进行修改后的linux系统代码,由开发板开发商提供
下载地址:http://www.arm9.net/mini2440-linux.asp
文件名:Linux 2.6.32.2 for mini2440/micro2440
该源代码在制作内核树的过程中需要使用到arm-linux-gcc等交叉编译工具,故而先配置交叉编译环境,后制作内核树。
笔者理解:内核树与你运行的宿主机之间没有太多关系。内核树的源代码需要与你使用的开发板的源代码相同。读者可根据自己情况到开发板的开发商官网下载,都会提供的。
二.交叉编译环境的安装及配置
首先下载交叉编译工具链,这里提供笔者使用的ARM-Linux GCC 4.4.3
下载地址:http://www.arm9.net/mini2440-linux.asp
文件名:ARM-Linux GCC 4.4.3
1.把arm-linux-gcc-4.4.3-20100728.tar.gz拷贝到任意文件夹下(这里文件名请不要照抄,根据实际情况使用tab补全,较熟悉的用户也不要吐槽笔者这么罗嗦,因为我就干过。。。后面不做赘述)
2.运行
$ sudo tar xvzf arm-linux-gcc-4.4.3-20100728.tar.gz -C /解压该压缩包。这里需要注意的是-C使用大写C,且C后有空格,然后加/ 这里-C的意思是改变解压路径
3.在/usr/local目录下建立arm路径
$ sudo mkdir /usr/local/arm
将/opt/FriendlyARM/toolschain/4.4.3文件夹全部拷贝到/usr/local/arm下(/opt下的FriendlyARM正是从第二步中解压出来的。该压缩包直接把/opt打包的。)
$ sudo cp -r /opt/FriendlyARM/toolschain/4.4.3 /usr/local/arm
4.修改环境变量,把交叉编译器的路径加入到PATH
这里提供ubuntu的方法(莫吐槽。。。我用的虚拟机。。。莫骂我)
在/home/用户名/.bashrc文件最后添加
export PATH=$PATH:/usr/local/arm/4.4.3/bin
然后运行
$ sudo source /home/用户名/.bashrc
然后检查环境变量添加是否成功
$ echo $PATH
查找是否已经将环境变量添加成功。
如果成功
运行
$ arm-linux-gcc -v
查看是否输出arm-linux-gcc的版本号,
如果正确,交叉编译环境应该就安装完成了。
三.内核树的构建
在编译驱动模块的过程中,内核树是必不可缺的。四楼提供了本例中内核树构建的源代码,读者应按照自己的实际情况,去开发板的官网下载相应的源代码。
1.本例中讲源代码拷贝到/tmp/linux/下,
2.在/opt/FriendlyARM/目录下创建mini2440文件夹
$ sudo mkdir /opt/FridendlyARM/mini2440 并进入该目录
$ cd /opt/FridendlyARM/mini2440
解压源代码
$tar xvzf /tmp/linux/linux-2.6.29-mini2440-20090331.tgz
3.配置编译文件
$ cd /opt/FriendlyARM/mini2440/linux-2.6.29
$ cp config_mini2440_t35 .config
配置内核
$sudo apt-get install libncurses5-dev
$ make menuconfig
选择Load an Alternate Configuration File
到这里编译内核树的准备工作还有最重要的一项。由于这里的内核是基于arm架构的,所以在编译的过程中需要使用到之前配置的交叉编译环境即arm-linux-gcc等。而内核源代码中的Makefile文件中的编译工具的地址需要修改为本机配置的具体地址。
4.makefile文件修改
在/opt/FriendlyARM/mini2440/linux-2.6.29下运行
$ 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
OBJDUMP= $(CROSS_COMPILE)objdump
#OBJDUMP = /usr/local/arm/4.4.3/bin/arm-linux-objdump
注意笔者对最后一项未作修改,至于原因嘛。。。。试出来的。。。。
到这里准备工作完成
5.编译
$ sudo make prepare
$ sudo make scripts
$ sudo make
不出意料的话,到这里,内核树的编译也完成了。
四.关于驱动模块Makefile文件的编写
Makefile文件对于编译成功与否起到至关重要的作用。
在编译内核模块如驱动模块时需要制定内核为刚刚制作完成的内核树
obj-m:=s3c2440.o
CURRENT_PATH:=$(shell pwd)
ARM_LINUX_KERNEL:=/opt/FriendlyARM/mini2440/linux-2.6.32.2
all:
$(MAKE) -C $(ARM_LINUX_KERNEL) SUBDIRS=$(CURRENT_PATH) modulesclean:
rm -rf *.cmd *.o *.ko *.mod.c *.symvers *.order
上面的Makefile文件给大家一个参考。
第三行应该填写自己编译的内核树的具体位置,本例中为上文所写的内容。
五.最后
本例中许多命令需要使用root权限,请尽量sudo执行。如果与问题,请确认赋予了root权限。
本文参考了大量网络文献,不能一一列举,望作者见谅。有chinaUnix社区的大量美文。
本文中六楼第四步,即关于构建内核树过程中Makefile文件的修改系笔者原创,故而,关于这一部分的吐槽和赞美都嘲我来吧。
http://blog.csdn.net/sabalol/article/details/2076610
http://www.zhiwenweb.cn/Category/Learning/linux-ubuntu-Driver-Development-environment.html
上面两篇文章可能给你带来帮助。
完~
http://tieba.baidu.com/p/2055472114?see_lz=1
【基于mini2440开发板的交叉编译环境及内核树配置.的更多相关文章
- u-boot-2011.06在基于s3c2440开发板的移植之引导内核与加载根文件系统
http://www.linuxidc.com/Linux/2012-09/70510.htm 来源:Linux社区 作者:赵春江 uboot最主要的功能就是能够引导内核启动.本文就介绍如何实现该 ...
- 一个简单的基于MINI2440开发板的启动代码
1. S3C2440大概的启动流程(NAND启动): ①设置CPU为SVC模式 ②关闭看门狗 ③屏蔽中断 ④关闭MMU ⑤初始化时钟 ⑥初始化内存(SDRAM) ⑦初始化栈指针(SP, R13) ⑧初 ...
- 第五章——搭建S3C6410开发板的测试环境
搭建S3C6410开发板的测试环境 通过本章的学习学会了如何在开发板上安装Android.开发板是学习和开发嵌入式技术的主要硬件设备,想要顺利的通过linux驱动访问硬件,是不能在PC板上模拟的,需要 ...
- 基于uFUN开发板的心率计(三)Qt上位机的实现
前言 上两周利用周末的时间,分别写了基于uFUN开发板的心率计(一)DMA方式获取传感器数据和基于uFUN开发板的心率计(二)动态阈值算法获取心率值,介绍了AD采集传感器数据和数据的滤波处理获取心率值 ...
- 【转】Vsftpd-3.0.2服务器arm-linux移植—mini2440开发板
Vsftpd-3.0.2服务器arm-linux移植—mini2440开发板 开发板:mini2440(2011.04.21)环境:ubuntu9.10 为方便的将文件上传到开发板,采用vsftpd, ...
- 手把手教你君正X2000开发板的OpenHarmony环境搭建
摘要:本文主要介绍基于君正X2000开发板的OpenHarmony环境搭建以及简单介绍网络配置情况 本文分享自华为云社区<君正X2000开发板的OpenHarmony环境搭建>,作者: 星 ...
- 基于uFUN开发板和扩展板的联网校准时钟
项目概述 上周在uFUN试用群里看到管理员说试用活动快结束了,要抓紧完成评测总结,看大家的评测总结也都写了,我也不能落后啊!正好最近做的扩展板到手了,于是赶紧进行调试,做了一个不用校准的时钟,时钟这种 ...
- 基于uFUN开发板的RGB调色板
前言 使用uFUN开发板配合Qt上位机,实现任意颜色的混合,Qt上位机下发RGB数值,范围0-255,uFUN开发板进行解析,然后输出不同占空比的PWM,从而实现通过RGB三原色调制出任意颜色. Qt ...
- 基于uFUN开发板的心率计(二)动态阈值算法获取心率值
前言 上一篇文章:基于uFUN开发板的心率计(一)DMA方式获取传感器数据,介绍了如何获取PulseSensor心率传感器的电压值,并对硬件电路进行了计算分析.心率计,重要的是要获取到心率值,本篇文章 ...
随机推荐
- Git学习笔记(1)
1.安装Git: 在linux下安装:yum install git 其他系统安装在这里略去~~~ 安装完成后,需要设置一下,在命令行输入以下命令: [root@xwq ~]# git config ...
- 00072_System类
1.概念 (1)System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作: (2)System类不能手动创建对象,因为构造方法被private修饰,阻止外界创建对象: (3)Syste ...
- java-org.dom4j常用api介绍
//导入必要的包 import org.dom4j.Document;//Document文档类 import org.dom4j.Element//元素节点类 import org.dom4j.QN ...
- SQLPlus在连接时通常有四种方式
SQLPlus在连接时通常有四种方式 1. ? 1 sqlplus / as sysdba 操作系统认证,不需要数据库服务器启动listener,也不需要数据库服务器处于可用状态.比如我们想要启动数据 ...
- 数据库-mongodb-高级查询表达式
不等于 $nq 1 2 SQL : select * where != 3 NOSQL : db.goods.find({cat_id:{$ne:3 }},{cat_id:1,id:0}); NOS ...
- java web项目发生异常依然能运行
由于JavaWeb应用业务逻辑的复杂性,容易发生一些意想不到的错误和异常,给系统的调试带来不必要的麻烦,不友好的提示信息使编程者对错误和异常无从下手.特别是当发生异常时,Java异常栈输出的信息只能给 ...
- javascript操作window对象
document.defaultView或全局变量window--获取一个window对象. 1)获取窗体信息 innerHeight.innerWidth--获取窗体内容区域的高度.宽度. oute ...
- NEFU 84
其实同POJ 1061 #include <iostream> #include <cstdio> #include <cstring> #include < ...
- hive 配置注意事项及初始化hive 元数据
今天配置hive 犯了一个问题:下载的hive tar.gz 里的conf文件夹仅仅有一个 hive-default.xml.template,于是我就cp 了一份命名为:hive-default. ...
- 2015.04.30,外语,读书笔记-《Word Power Made Easy》 14 “如何谈论日常现象” SESSION 40
1. money, and what it will buy penury(['penjuri] n. 贫穷,拮据),来自拉丁词语penuria(need,needness的意思),主要指缺乏财富资源 ...