linux 编译进内核 && 编译成模块module

您所在的位置:网站首页 编译linux内核需要多久完成 linux 编译进内核 && 编译成模块module

linux 编译进内核 && 编译成模块module

2024-07-14 13:44| 来源: 网络整理| 查看: 265

refer:

http://blog.csdn.net/yicao821/article/details/6740269

http://blog.csdn.net/yicao821/article/details/6740269

1.内核编译命令(makefile)

obj-y:把由foo.c 或者 foo.s 文件编译得到foo.o 并连接进内核.

obj-m: 则表示该文件作为模块编译.

除了y、m以外的obj-x 形式的目标都不会被编译。

2.内核编译 (make menuconfig)

make   menuconfig

*标识编译到内核,

M标识作为内核模块编译.

空格,表示该功能不编译到内核中,即新的内核将不支持该功能.

3.模块静态编译到内核和编译成模块实例

【实验目的】      配置编译支持目标板的Linux-2.6.22.6的内核,熟悉Linux内核的配置选项和编译过程。 熟悉模块静态编译到内核和编译成模块,动态加载的方法和过程。

【实验环境】 1、主  机:Ubuntu 10.10 发行版 [首先得配置好开发环境] 2、目标机:FS2410开发板以及移植好的u-boot-2010.03、内核源码包:linux-2.6.22.6.tar.bz2(打补丁后便支持FS2410) 4、交叉编译器 arm-linux-gnu-gcc-3.4.5

【实验步骤】

一、模块静态编译到内核 (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 找到ARCH和CROSS_COMPILE,修改 ARCH = arm CROSS_COMPILE = arm-linux-gnu- 保存退出

(3)添加程序文件 将 2410GPIO_TEST_drv.c 文件拷贝到内核代码目录 drivers/char 中 (4)修改Makefile和Kconfig文件 进入内核的 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”, ,如下图:   选“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灯在闪烁。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3