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 开放完成!
- Linux 嵌入式驱动开发 -- 环境搭建及模块编程初步
- 嵌入式驱动开发环境搭建
- 嵌入式驱动开发环境搭建
- 嵌入式驱动开发环境搭建
- 嵌入式系统----环境搭建与开发初步
- 嵌入式系统----环境搭建与开发初步
- windows上搭建嵌入式linux驱动开发环境
- 嵌入式linux驱动开发环境搭建(亲测成功)
- 搭建Linux嵌入式开发环境
- 搭建Linux嵌入式开发环境
- 嵌入式Linux开发环境搭建
- 嵌入式Linux开发环境搭建
- 嵌入式Linux开发环境搭建
- 嵌入式Linux开发环境搭建
- 嵌入式Linux开发环境搭建
- 【嵌入式Linux驱动开发】二、模块
- tiny4412-arm嵌入式开发裸板驱动 (一):开发环境及工具搭建和介绍
- 使用Magic linux搭建嵌入式开发环境
- 求最大公约数
- 枚举类型
- 牛刀小试——标题|菜单同行显示的两种实现方式
- ISerializable用法(初级)
- 防止JAVA代码被反编译的方法
- Linux 嵌入式驱动开发 -- 环境搭建及模块编程初步
- c++ 读取某个文件夹下的所有文件
- 在ubuntu 12.04 下搭建mini2440开发环境
- 查看论文
- 寒假前刷题(9)搜索系列 bfs hdu 1312
- PC-lint安装与集成(检查Unix环境代码)(一)
- 【NPC】18、团问题规约到子图同构问题
- Ubuntu下mini2440的系统烧写
- 解决Android项目中的 import android.opengl.Object3D; 的错误