·ChinaUnix首页 ·论坛 ·博客 
Linux首页 | Linux新闻 | Linux文档 | Linux论坛 | Linux下载 | Linux博客 | Linux搜索
新手入门 | 安装启动 | 管理员指南 | 开发手册 | 桌面应用 | 程序开发 | 数据库 | 网络技术| CentOS | Fedora | MySQL | Apache | Ubuntu | Gentoo| OSCON08
  Linux时代 >> 技术文档 >> 程序开发
 
在linux2.6下如何利用交叉编译工具编译内核模块
来源: ChinaUnix博客  日期: 2008.03.16 15:04 (共有条评论) 我要评论
 
文档介绍:
    此文档用来说明如何构建自己的内核模块以及如何在DBAU1200开发板上运行内核模块。
    在确保DBAU1200开发板上可以正确启动linux内核以及正确挂载根文件系统以后,即可进行下面一步工作,开发内核模块。驱动可以通过内核模块的方式动态的加载到内核中,同时也可以动态的卸载,这种加载驱动的方式可以大大加快驱动的开发周期,而不必要每次修改驱动都要重新编译一次内核。
一个简单的内核模块:
#include
#include
#include
MODULE_******("GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, Linux world!\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, Linux world!\n");
}
module_init(hello_init);
module_exit(hello_exit);
将其保存为hello.c文件。
然后,编写一个简单的Makefile :
ifneq ($(KERNELRELEASE),)
mymodule-objs := hello.o
obj-m := mymodule.o
else
PWD := $(shell pwd)
KVR ?= $(shell uname -r)
KDIR := /lib/modules/$(KVR)/build
all:
       $(MAKE) -C $(KDIR) M=$(PWD)
clean:
       rm -rf .*.cmd *.o *.mod.c .tmp_versions
endif
注意,在Makefile中,命令行的前面一定要加上一个Tab符,将上述内容保存文件名为Makefile,然后在确保交叉编译工具正确以后,运行make命令编译此内核模块,make的参数如下所示:
make ARCH=mips CROSS_COMPILE=mipsel-unknown-linux-gnu- KDIR=/home/juran/Build_linux/linux2.6/linux-2.6.21.5
其中,ARCH表示的是目标的体系结构,对应于源代码下ARCH/目录下的内容,
CROSS_COMPILE 表示的是交叉编译工具的前缀,
KDIR 指向编译进目标板的linux内核的顶层路径。
make完成以后生成一堆文件,其中,mymodule.ko即是我们所需要的内核模块。
下面,将内核模块mymodule.ko放入根文件系统,采用网络根文件系统的方式或者采用Initramfs将根文件系统编译进内核的方式均可。mymodule.ko可以放在根文件系统下/usr目录之下。
然后,用yamon启动linux内核,挂载根文件系统以后,
#cd usr
#insmod mymodule.ko
就会看见控制台上输出对应的信息了。
注意:根文件系统必须是利用busybox自己制作的,利用和编译内核一样的交叉编译工具来编译busybox,在配置busybox的时候,选上 insmod等命令的相关支持。起初,我用网上下载的根文件系统来insmod,结果显示kernel version mismatch ,这个根文件系统是为2.4的内核制作的,在2.6的内核里面也可以正确的挂载和使用一些命令,但是,在使用insmod这个命令的时候却出现了问题,所以还是建议采用busybox生成自己的根文件系统。

转    arm-linux2.6 交叉编译环境的建立
本人使用的HOST : redhat 9.0 + gcc.3.2.2
这种方法是将两个版本的交叉编译环境进行取舍,合并成一个你所需要的版本, 在网络上有很多toolchain,未必能够满足你的实际需要,只好自己改一改。
下面的是我在编译linux-2.6.0.tar.gz + patch-2.6.0-rmk2.gz 是用的toolchain . 我将原来的两个版本的toolchain 作了如下操作,得到新的toolchain :
1.首先在
http://handhelds.org/download/toolchain/arm-linux-gcc-3.3.2.tar.bz2
下载 arm-gcc 3.3.2
2.将arm-linux-gcc-3.3.2.tar.bz2 解压到 /toolchain
# tar jxvf arm-linux-gcc-3.3.2.tar.bz2
# mv /usr/local/arm/3.3.2 /toolchain
3. 在
http://handhelds.org/download/toolchain/arm-linux-toolchain-post-2.2.13.tar.gz
下载arm-linux-toolchain-post-2.2.13.tar.gz (其实我只是用了它的头文件而已,大家可以根据需要定制头文件,主要来自内核/linux-x.x/include下)
4. 将arm-linux-toolchain-post-2.2.13.tar.gz 解压到 /skiff/local/ 下
# tar zxvf arm-linux-toolchain-post-2.2.13.tar.gz
5. 拷贝头文件到/toolchain/arm-linux/ 下. 然后删除 /skiff
# cp -dR /skiff/local/arm-linux/include /toolchain/arm-linux/
# rm -fr /skiff
6. ok! arm linux 2.6 的交叉编译环境建立好了! /toolchain/bin/arm-linux-
各位好运!

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/50410/showart_497604.html
  发表评论 查看评论(共有条评论) 我要提问
 
 


最新资讯更多>> 
· Wine 1.1.6 发布
· Wikipedia“变心”,力挺Ubuntu
· Shopex收购ecshop,discuz为了..
· 提前下载:OpenOffice.org 3.0..
· 微软Office面临严重挑战?
· 媒体观察:法国收获开源带来的启示
· 微软频繁接触开源 跨越“源”界限
· 挣脱Windows束缚 拥抱Ubuntu L..
· Puppy Linux领导者转向开发UniPup
· 发行版发布:Mandriva Linux 2009
论坛热点更多>> 
· 那些常常见到又叫不出名字的花
· xp 和LINUX 上网下载东西
· 关于秋日里的一场梦。。。。。。
· LILEI和HANMEIMEI的欲望人生..
· 这几道题会做就可直接找LINU..
· Oracle再祭收购大旗,这次红..
· RHCE考试费4200!NND
· 配置DNS主从自动更新同步,无..
· 夜店最火辣的Party girls
· 倒!同事一个比一个住的远
文档更新更多>> 
· kmess1.5.1在红旗6sp1上的安装方法
· OOo3.0 RC2 发布,中文版可用。
· IT从业人员必看的10大论坛
· SSH权威指南
· DNS相关定义介绍
· OpenVPN(zt)
· Linux shell I/O重定向详解
· linux下的烧写环境配置
· tcpdump详细用法
· 转:ARM的嵌入式Linux移植体验之基..
 
关于我们 | 联系方式 | 广告合作 | 诚聘英才 | 网站地图 | 友情链接 | 免费注册

Copyright © 2001-2008 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们

京ICP证041476号