前不久导师要求交叉编译一个基于arm平台开发的内核模块来练手,在网上查了很多资料才弄出来,于是将这些零散的信息综合起来给和我一样的入门人员了解。水平有限,请谅解~

1.安装arm-none-linux-gnueabi交叉编译器

很多时候我们需要编译运行在其他平台的文件,而没有条件在目标平台上直接编译时,我们就用到了交叉编译。顾名思义就是在现有平台编译目标平台的程序。

在linux编译arm平台的内核模块时,大多采用arm-none-linux-gnueabi交叉编译器。这个编译器虽然在官网可以下载但是很难找,在此贴出一个百度云盘的共享地址:http://pan.baidu.com/share/link?shareid=2940135020&uk=1443951890

在ubuntu下,输入命令:

$tar-xvjfarmarm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar

将该文件解压。然后输入命令:gedit ~/.bashrc在文件的末尾添加 exportPATH=$PATH:/usr/local/arm/4.4.3/bin

这样就配置好了环境变量。我们可以输入arm-none-linux然后按Tab键看是否填充来判断环境变量是否配置完好。

请注意一点,由于arm-none-linux-gnueabi需要运行在32位的linux上,如果按照上述配置完了环境变量后依然无法填充,请检查linux的版本是32位还是64位(可以输入:getconf LONG_BIT查看)如果是64位操作系统那么要么重新安装32位要么输入命令:sudo apt-getinstall ia32-libs来安装32位的兼容库。

2.构造linux内核源码树

在编写内核模块时需要引用到相应的文件。如果不去构造linux内核源码树就进行编译的话,会提示找不到相应的.h文件。一般来说,要编译一个内核模块时一定要知道它是基于哪个内核版本编写的。然后下载这个版本的内核源码构造源码树。比如说,需要编译的内核模块时基于2.6的内核,而现在使用的ubuntu是基于3.2内核的版本。没有关系,下载2.6的内核,然后放到一个文件夹中进行构造就行。为图方便,可以直接放在桌面。

内核源码可以事先下载,然后再linux下解压。也可以输入命令:sudo apt-get install linux-source-2.6.27(如果是其他版本只要替换后面的版本数字就可以了)下载源码,然后到/usr/src里面找到它,并对其进行解压。

然后我们输入命令:export ARCH=arm以及

export CROSS_COMPILE=arm-none-linux-gnueabi-这里的CROSS_COMPILE环境变量就是指定交叉编译器。进入解压后的源码目录。假设我们的源码目录在~/Desktop/linux-source-2.6.27下,那么我们先进入它的/arch/arm/configs文件夹中找一个config文件,至于选哪个合适说实话我也没弄清楚,当时我所选的是S3C_2410_defconfig文件。貌似选哪一个文件得和目标平台有关。当选好config文件后,用cp 命令将其复制到~Desktop/linux-source-2.6.27 也就是我们的源码目录下,并更名为.config 更名后的文件需要使用ls -a才能显示出来。

做好这一切后,接下来就运行命令 sudo makemenuconfig,如果不出意外就会看到类似以下界面:

然后作用键选择退出这个界面。需要说明一点,如果在运行sudo make menuconfig 命令时出现以下错误提示信息:

*** Unable to find the ncurses libraries or the*** required header files.*** ‘make menuconfig’ requires the ncurses libraries.****** Install ncurses (ncurses-devel) and try again.

那么就运行命令:sudo apt-get insatll ncurses-dev

sudo apt-get install libncurses5-dev安装相应的软件。如果是在CentOS下则运行命令yum install -y ncurses-devel即可。

接下来就依次运行以下命令:

sudo make oldconfig

sudo make(时间比较长)

sudo make bzImage

sudomake modules

sudo make modules_install

在网上看到很多人执行这些命令时遇到了些错误以及他们解决的办法。不过由于我试了几次都没有问题,在此就不贴出问题了,如果遇到可以“放狗搜一下”。

成功执行上述命令后,我们会在源码目录下看到vmlinux.o文件。

3.编译内核模块

内核模块的Makefile文件中,KERN_DIR = /lib/modules/$(shell uname -r)/build就是引用内核源码树的位置。当我们构建好了内核源码树后只需要将$(shell uname -r)换成安装好的内核源码版本就行。具体可以进入/lib/modules下查看。

以上就是我初学交叉编译arm平台的内核模块的总结,其实很多部分也只是知其然不知其所以然,还有很多需要学习。整理出来就是希望其他和我一样的菜鸟可以少走些弯路。

交叉编译php-5.6.30,linux下用arm-none-linux-gnueabi交叉编译arm内核模块相关推荐

  1. linux下ioctl操作网络接口,linux下无线网卡的ioctl 接口

    var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/ba ...

  2. [转帖]linux下的X server:linux图形界面原理

    linux下的X server:linux图形界面原理 https://www.cnblogs.com/liangxiaofeng/p/5034912.html linux下的X server:lin ...

  3. linux下的X server:linux图形界面原理

    linux下的X server:linux图形界面原理 Moblin Core是在Gnome Mobile的平台上建立.我以前玩Linux,提交的都和图像没有关系,连Xwindows都不用启动,开机后 ...

  4. Linux下的tree命令 --Linux下目录树查看

    Linux下的tree命令 --Linux下目录树查看 有时我们需要生成目录树结构,可以使用的有ls -R,但是实际效果并不好 这时需要用到tree命令,但是大部分Linux系统是默认不安装该命令的, ...

  5. Linux下python的命令,linux下python相关命令

    若本机已安装python2,尽量不要动现有的python2,额外安装python3即可. 1.安装python3.6(centos下安装python3自带pip和setuptools) # 安装依赖环 ...

  6. linux下怎么绑定arp,LINUX 下进行arp 绑定.doc

    LINUX 下进行arp 绑定 LINUX 下进行arp 绑定 一.约定 1.网关上已经对下面所带的机器作了绑定.网关IP: MAC:00:02:B3:38:08:62 2.要进行绑定的Linux主机 ...

  7. linux下的进程创建,Linux下进程的创建

    这篇文章主要是讲解到Linux进程的控制,包括程序和进程.守护进程.守护进程的出错处理. 1.程序和进程 程序(program)是存放在磁盘文件中的可执行文件,程序的执行实例被称为进程(process ...

  8. 通过mtd读写flash_mtd_debug:linux下直接读写flash扇区 及 交叉编译mtd_utils

    mtd_debug是一个linux下直接读写flash扇区的工具,是mtd-utils的一个部件.具体用法如下: ./mtd_debug read ./mtd_debug write [len] ./ ...

  9. linux下拒绝用户登录,Linux系统用户管理之禁止用户登录

    一.问题描述 今天在CentOS上切换用户的时候提示This account is currently not available su elasticsearch This account is c ...

  10. 如何将exe文件在linux下执行,如何在Linux系统下查找可执行文件

    可执行文件是指可移植可执行的文件,用于程序的执行,那么Linux下要如何查找可执行文件呢?下面小编就给大家介绍下Linux中查找可执行文件的方法,一起来了解下吧. linux下查找可执行文件 ls - ...

最新文章

  1. windows 系统下多网卡绑定/绑定配置
  2. anaconda powershell prompt 启动vscode_记一个VS Code终端显示问题的较完美解决
  3. 蓝桥杯java第三届决赛第一题--星期日
  4. 动态规划之最长公共子串
  5. 并行DA实验c语言程序,哈工大C语言DA实验报告.doc
  6. Maven之pom.xml常用标签解析及镜像配置
  7. 为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?...
  8. RESTful 架构
  9. 服务器上的安全数据没有此工作站信任关系的计算机账户_综合监控系统等级保护安全解决方案...
  10. notepad++ 中增加lua语法检查快捷键
  11. azure云服务器搭建连接_如何创建到Azure SQL数据库的链接服务器
  12. 高级工程师究竟比你“高”在哪?
  13. 数据库errno: 1045的解决办法
  14. openstreetmap数据下载大全(路网、水系、历史数据下载)
  15. BT5 U盘制作方法
  16. 数字信号处理 matlab 答案,数字信号处理原理及其matlab实现课后习题解答
  17. 一个关于IT界牛人的故事,估计是杜撰的。
  18. Linux-脚本安装、快照、重置虚拟机
  19. Origin绘制双Y轴图的方法
  20. FireBird Embedded学习日记

热门文章

  1. Memcached原理深度分析详解
  2. 答“我们的团队项目是否有大泥球?”
  3. G4Sui老师的pair project(197)
  4. ZedGraph在Web中的使用
  5. 多云,安全集成推动了SD-WAN的广泛采用—Vecloud
  6. 通过Internet与数据链路层传输信息时会发生什么?—Vecloud微云
  7. 2019杭电暑假多校训练 第六场 Snowy Smile HDU - 6638
  8. HashMap,HashTable,ConcurrentHashMap面试总结!!!
  9. 自学python之路(day2)
  10. WebService 学习之路(一):了解并使用webService