花了两天时间,终于搭建好了板子上的linux驱动开发环境,不容易呀,做个笔记。

首先搭建PC上的编译环境,因为编译的驱动是在板子上运行的,第一步当然需要安装交叉编译器,即arm-none-linux-gnueabi-gcc等或者是arm-linux-gcc等。其实比较简单,可以从网上下载或者光盘中得到,给出一个网址http://wiki.emsym.com/wiki/%E6%90%AD%E5%BB%BALinux%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83#.E4.BA.A4.E5.8F.89.E7.BC.96.E8.AF.91.E5.B7.A5.E5.85.B7gcc-arm-linux-gnueabi.E5.AE.89.E8.A3.85

对照第一个来就对了,得到编译器的包后拷贝到/usr/loca/ 解压缩,关键的步骤是设置环境变量,即使其他程序能找到arm gcc,有好几方式设置环境变量:

(1) 用文本编辑器打开/etc/profile

在最后面加上

ARM_PATH=/usr/local/arm-2009q1/bin/    #(这个是你编译器的路径)

PATH=$ARM_PATH/bin:$PATH

export ARM_PATH

需要注销重新登录

(2)修改.bashrc文件  

这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了。

加的东西和上面一样

也需要注销重新登录,生效。

(3)本人用的是第三种方法

打开/etc/environment 在最后一项添加:/usr/local/arm-2009q1/bin/   各项间以:分隔,还是注销重新登录。

试验一下,在终端中输入arm- 然后tab键,如果能补全就ok了。

编译器装好了,下一步就应该是目标机的库环境,因为最终驱动是运行在板子上,所以需要有板子的linux内核代码,构建库。板子是借同事的TQ2440,从天嵌论坛上下载内核源代码,放在/usr/src 目录下解压后进入代码目录,这里需要敲三个命令:

make oldconfig;

make prepare

这个时候可能会提示出错,找不到arm-linux-gcc, 如果安装的是arm-none-linux-gnueabi-gcc的话 需要修改内核源码目录下的Makefile 中的

CROSS_COMPILE = arm-linux-  改成

CROSS_COMPILE = arm-none-linux-gnueabi 即可。

最后 make scripts/

这样编译环境就搭建好了,接下来就是测试一下,把《linux设备驱动程序》中的hello 程序拿来用,修改Makefile

ifneq ($(KERNELRELEASE),)

# call from kernel build system

obj-m := hello.o

else

KERNELDIR ?= /usr/src/linux-2.6.30.4/

#KERNELDIR ?= /lib/modules/$(shell uname -r)/build

PWD       := $(shell pwd)

default:

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

endif

clean:

rm -rf *.o *~core .depend .*.cmd *.ko *.mod.c .tmp_versions

红色标起来的地方就是以前编写本机驱动需要调库的路径,现在改成板上内核源码路径。

#make

得到hello.ko

接下来就是要把hello.ko弄到板子上去,有两种方式一种是通过tftp,另一种是u盘直接拷,我先试的第一种,#ftp 我电脑ip

但是奇怪的是,板子访问我的win7上的tftp服务器老是被拒绝,搞了一个晚上还没成功。第二天工作看到vxworks下的wftp32程序,因为vxworks的板子程序是用这个下载的,试着用一下,发现可以,激动了一下,回去就猛上,程序终于下到板子上去了然后 #insmod ./hello.ko 结果老是提示./hello.ko': invalid module,又去网上查了一下,有很多说法,最多的就是编译环境的版本号可能和板子上运行内核的版本号不一致,但是用uname -a

看了下版本号是一致的呀,找呀找,实在没办法,想到看一下日志.在板子上

敲#cat /proc/kmsg  提示Module len  3060 truncated  好像是长度出错,怀疑ftp传过来时出错,查看pc上的文件长度果然比板子上大1,不好办呀,ftp弄不好,暂时先用u盘拷过去吧,拷到板子上#insmod ./hello.ko 还是有问题提示hello: version magic '2.6.30.4briup mod_unload ARMv4 ' should be '2.6.30.4-EmbedSky mod_unload ARMv4 '

insmod: cannot insert './hello.ko': invalid module format

应该是版本号名字不同,想想应该可以在内核源码配置中修改,于是又到pc上板子内核源码目录下#grep briup ./ -r 果然找到./.config文件中有CONFIG_LOCALVERSION=briup 将其值改成-EmbedSky保存,然后#make oldconfig; #make prepare #make scripts

重新编译hello.ko,拷到板子上 #insmod ./hello.ko,终于终端显示

hello: module license 'Dual/GPL' taints kernel.

Disabling lock debugging due to kernel taint

hello,world

Hello,linux

成功了。

嵌入式linux环境搭建的更多相关文章

  1. 嵌入式Linux环境搭建备忘

    嵌入式Linux开发平台搭建步骤: 1.安装宿主机Linux系统 如果选用最新的Linux发行版,应改主意其他软件是否能很好的兼容. 2.安装交叉编译器 交叉编译器的版本很多,一般到芯片厂家官网下载官 ...

  2. 转:Qt 嵌入式开发环境搭建

    地址: http://www.cnblogs.com/lishixian/articles/3013897.html         作者:lsx_007 这里主要是记录了自己在搭建嵌入式开发环境时阅 ...

  3. iMX287A嵌入式Qt环境搭建

    目录 1.嵌入式Qt简介 2.查看开发板Qt库的版本 3.第一个嵌入式Qt程序--Hello World 4.Linux桌面版本Qt环境的搭建 5.注意 @ 1.嵌入式Qt简介 Qt 是一个跨平台的应 ...

  4. 【转】Linux环境搭建FTP服务器与Python实现FTP客户端的交互介绍

    Linux环境搭建FTP服务器与Python实现FTP客户端的交互介绍 FTP 是File Transfer Protocol(文件传输协议)的英文简称,它基于传输层协议TCP建立,用于Interne ...

  5. Linux环境搭建-在虚拟机中安装Centos7.0

    最近在空闲时间学习Linux环境中各种服务的安装与配置,都属于入门级别的,这里把所有的学习过程记录下来,和大家一起分享. 我的电脑系统是win7,所以我需要在win7上安装一个虚拟机-VMware,然 ...

  6. 【菜鸟学习Linux】-第三章- Linux环境搭建-使用VMware9安装Ubuntu 12.04系统

    上一步,我们安装了VMware9虚拟机,现在我们就是用它来安装Ubuntu12.04系统,至于Ubuntu是什么,我就不废话了,大家google一下,比我讲的清楚,好了,开始干活! Ubuntu官网下 ...

  7. Windows及Linux环境搭建Redis集群

    一.Windows环境搭建Redis集群 参考资料:Windows 环境搭建Redis集群 二.Linux环境搭建Redis集群 参考资料:Redis Cluster的搭建与部署,实现redis的分布 ...

  8. ubuntu-10.10嵌入式开发环境搭建【转】

    本文转载自:http://blog.csdn.net/zjhsucceed_329/article/details/8036781 版权声明:本文为博主原创文章,未经博主允许不得转载. ubuntu- ...

  9. Linux(一)-- Linux环境搭建

    Linux环境搭建 一.虚拟机安装 1.下载地址 https://my.vmware.com/web/vmware/info/slug/desktop_end_user_computing/vmwar ...

随机推荐

  1. [原创]java WEB学习笔记36:Java Bean 概述,及在JSP 中的使用,原理

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  2. Delphi程序的自动升级功能的实现(AutoUpdate使用指南)

    在UtiMnid组件下,利用auAutoUpgrader实现自动升级(已经测试通过) 第一步:下载AutoUpgrader.Pro.v4.6.4. 第二步:打开AutoUpgrader.Pro.v4. ...

  3. IE和FireFox关于CSS的兼容性

    1. [代码][Java]代码 CSS对浏览器的兼容性有时让人很头疼,或许当你了解当中的技巧跟原理,就会觉得也不是难事,从网上收集了IE7,6与Fireofx的兼容性处理技巧并整理了一下.对于web2 ...

  4. float,double与long long哪个更大?

    float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38: double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+ ...

  5. 设置Suse linux 用户远程登录超时时间

    执行  # echo "export TMOUT=900"  >>  /etc/profile 查询设置结果: # cat /etc/profile|grep TMOU ...

  6. 使用 py2exe 打包 Python 程序

    上回在<使用 PyInstaller 打包 Python 程序>中,我们介绍了使用 PyInstaller 对 Python 程序进行打包,今天带大家认识一个新的工具:py2exe. 接下 ...

  7. uoj problem 10

    uoj problem 10 题目大意: 给定任务若干,每个任务在\(t_i\)收到,需要\(s_i\)秒去完成,优先级为\(p_i\) 你采用如下策略: 每一秒开始时,先收到所有在该秒出现的任务,然 ...

  8. URI is not registered (Settings | Languages & Frameworks | Schemas and DTDs)

    解决:鼠标悬于上方Alt + Enter 选择Ignore

  9. bzoj 2716 [Violet 3]天使玩偶——KDtree

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2716 第三道KDtree!仍旧是模板.还有CDQ分治做法,见下面. 数组迷之开大?(开6e5 ...

  10. cs2008中头文件交叉编译的问题

    使用全局变量 使用基类指针定义在头文件中,在实际使用中强制转型为需要的指针,当然应该也可以存为空指针.