设为首页 加入收藏

TOP

模块静态编译到内核和编译成模块实例
2014-11-24 11:20:30 来源: 作者: 【 】 浏览:0
Tags:模块 静态 编译 内核 译成 实例

一、模块静态编译到内核
(1) 解压内核
$tar xvfz linux-2.6.22.6.tar.bz2


进入解压后的linux-2.6.22.6目录打补丁


$patch -p1 < ../linux-2.6.22.6_jz2440.patch


进入内核目录
$cd linux-2.6.22.6


(2)修改Makefile文件
修改内核目录树根下的的Makefile,指明交叉编译器:
$vim Makefile
找到ARCHCROSS_COMPILE,修改
ARCH = arm
CROSS_COMPILE = arm-linux-gnu-

保存退出


(3)添加程序文件
2410GPIO_TEST_drv.c 文件拷贝到内核代码目录 drivers/char
(4)修改MakefileKconfig文件
进入内核的 drivers/char 目录
$vim Makefile
找到在 obj-$(CONFIG_HANGCHECK_TIMER) += hangcheck-timer.o ,在其下一行添加:
obj-$(CONFIG_2410GPIO_TEST_DRV) += 2410GPIO_TEST_drv.o
保存退出vim
(5)修改Kconfig文件
$vim Kconfig
在以下代码段下面
menu "Character devices"
加入以下信息:
config 2410GPIO_TEST_DRV
tristate "S3C2410 test drv Device Support"
depends on ARCH_S3C2410
---help---
support led test device driver on FS2410 develop board


(6)配置内核将 2410GPIO_TEST_drv.c 静态编译金内核


$cp config_ok .config (使用提供的配置文件 make s3c2410_defconfig 使用默认的配置文件)
$make menuconfig

选择 “Character devices” 菜单项,进入后出现如下:

在第一项“S3C2410 test drv Device Support (NEW)”按“空格”键使其前面括号中的出现“*”,<*>

选“exit”退出,继续选“exit”退出,出现提示:

选择 Yes,退出。


(7)编译内核产生uImage文件, 并将uImage拷贝到/tftpboot目录中,复位开发板,重新启动。编译命令:
$ make uImage
$ sudo cp -f uImage /tftpboot//uImage
$ sudo chmod 777 -R /tftpboot


(8)交叉编译 2410GPIO_TEST_APP.c
arm-linux-gnu-gcc 2410GPIO_TEST_APP.c –o test


(9)复制 test /opt/filesystem(NFS文件系统)目录下
$ sudo cp test /opt/filesystem/root
重新给目标板上电,让它使用新的内核
[注意,以下10,11步骤在目标板的终端窗口中运行]
(10)创建 GPIO_TEST 设备节点,在开发板上运行如下命令:
# mknod -m 666 /dev/GPIO_TEST c 252 0
(11) 运行 test 测试,在开发板上运行如下命令:(此时进入的为/root目录下)
# ./test


此时,D12LED灯在闪烁。


二、编译成模块


(1) 重新配置编译内核,将GPIO_TESt编译成模块,动态加载
进入到 linux-2.6.22.6目录执行
$make menuconfig
选择 “Character devices” 菜单项,进入后出现如下:
在第一项“S3C2410 test drv Device Support (NEW)”按“空格”键使其前面括号中的出现“M”,<M> ,如下图:

选“exit”退出,继续选“exit”退出,出现提示:

选择 Yes,退出。
(2)编译内核产生uImage文件, 并将arch/arm/boot/uImge拷贝到/tftpboot目录中,复位开发板,重新启动:
$ make uImage modules
$sudo cp -f uImage /tftpboot/uImage


(3)复制 linux-2.6.22.6/drivers/char/2410GPIO_TEST_drv.ko/opt/filesystem/lib
$ sudo cp drivers/char/2410GPIO_TEST_drv.ko /opt/filesystem/lib

重新给目标板上电,让它使用新的内核


[注意,以下4, 5, 6步骤在目标板的终端窗口中运行]
(4)加载模块 2410GPIO_TEST_drv,在开发板上运行如下命令:
#insmod /lib/2410GPIO_TEST_drv.ko
(5)创建 GPIO_TEST 设备节点,在开发板上运行如下命令:
# mknod -m 666 /dev/GPIO_TEST c 252 0
(6) 在/root/目录下运行 test 测试,在开发板上运行如下命令:
# ./test
此时,D12LED灯在闪烁。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇实现Windows与Unix/Linux编程环境.. 下一篇Linux下的IPC-信号量的使用

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·怎样用 Python 写一 (2025-12-27 02:49:19)
·如何学习python数据 (2025-12-27 02:49:16)
·想要自学数据分析, (2025-12-27 02:49:14)
·Java 集合框架 - 菜 (2025-12-27 02:19:36)
·Java集合框架最全详 (2025-12-27 02:19:33)