嵌入式linux2.6.12内核源码树配置及hello_world模块实验
来源:互联网 发布:什么叫大数据交易 编辑:程序博客网 时间:2024/04/27 15:38
一、内核源码树配置
因为开发板的linux内核是2.6.12,所以内核源码树也用统一个内核版本构建。
1.准备内核源码包,并解压,得到目录linux-2.6.12:
tar -jxvf linux-2.6.12-090915.tar.bz2
2.进入目录linux-2.6.12
cd linux-2.6.12
3.修改顶层目录下的Makefile(linux-2.6.12/Makefile)把文件中的
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
改为:
ARCH =arm
CROSS_COMPILE =arm-linux-
4.make menuconfig(配置内核)
. 我的内核是是直接从飞凌的资料里复制过来的,配置时选择“load an alternate configuration file”,然后双击 .config 区域,改为S3C2440.CFG(linux2.6.12目录下以存在这一文件)。当然也可以手动配置。
5.配置完成后, make -> make modules ->make modules_install,命令完成后,在/lib/modules中就有了2.6.12-1940。内核在此文件夹中。
6.针对arm平台的内核树安装完成。
执行过程中遇到的问题:sudo make modules_install 时,提示 “make: arm-linux-gcc: Command not found”。
问题分析 :sudo make modules_install 获取超级用户权限来进行操作,你要先切换到root用户(su root)。
ubuntu默认进入普通用户,而root用户没有启用。
解决办法:sudo passwd root 设置root密码,su root命令进入root用户。执行命令 arm-linux-gcc -v,如果已经成功安装交叉编译器,会出现编译器版本信息。
二、第一个模块程序
hello_world.c
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello,world.\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye,linux.\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("ly");
MODULE_DESCRIPTION("my first module,hello_world");
Makefile
obj-m := hello_world.o
KERNELDIR := /lib/modules/2.6.12-h1940/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers *~
粗心将 obj-m := hello_world.o 写成了 obj-m := hello_world ,出现错误 arm-linux-gcc: no input files。
改正后 make, 生成 hello_world.ko。
通过minicom将模块传送到开发板,改变权限后可以加载运行模块。
insmod ./hello_world.ko 加载模块
rmmod hello_world 卸载模块
完。。。
- 嵌入式linux2.6.12内核源码树配置及hello_world模块实验
- Linux内核中添加hello_world模块
- linux2.6.38内核源码树的建立
- hello_world-1.0之原始的内核模块编程
- 使用menuconfig配置内核时对.config及内核模块的影响【使用的飞凌嵌入式板】
- 嵌入式Linux内核实验
- linux2.6.36内核配置笔记
- Linux2.6下内核模块编译
- linux2.6内核模块的编译
- 嵌入式Linux驱动及内核模块问题总结
- 关于linux2.6.32-2内核源码分析
- Linux2.6.36内核红黑树源码注释
- linux2.6内核源码下载地址
- 编写简单的内核模块及内核源码下载,内核模块Makefile编写
- 构建嵌入式系统交叉内核源码树
- 嵌入式linux驱动程序,内核源码树
- Linux2.6.32内核笔记(1)内核模块helloworld
- linux、内核源码、内核编译与配置、内核模块开发、内核启动流程
- 同的访问类型
- Linux 命令合并
- Red Hat Enterprise Linux 5.6[光盘镜像]
- Canvas之画七巧板
- JAVA通过BigDecimal四舍五入解决方案和注意事项
- 嵌入式linux2.6.12内核源码树配置及hello_world模块实验
- 记一次Android手机相册丢失事件及找回方案
- PHP单引号与双引号的区别
- SLA5032 500M 32通道逻辑分析仪的API函数接口
- MongoDB副本集学习(一):概述和环境搭建
- taglist安装配置
- java入门-对象的上转型对象
- 为何使用多线程
- HDU 3622 Bomb Game(2-sat)