现在的位置: 首页 > 综合 > 正文

linux内核树构建及错误处理总结

2013年02月05日 ⁄ 综合 ⁄ 共 1471字 ⁄ 字号 评论关闭

1. 内核树的构建过程:

1.1 安装所需软件

$ sudo apt-get install build-essential kernel-package libncurses5-dev

1.2 查看可用源码包

$ sudo apt-cache search linux-source

1.3 获取源码包

$ sudo apt-get install linux-source-x.x.x

1.4 解压源码包

$ tar jxvf linux-source-x.x.x.tar.bz2

1.5 利用.oldconfig初始化.config

$ make oldconfig

1.6 切换root

$ sudo -i

1.7 编译内核树

$ make -j4

2. 编译内核树遇到错误:

2.1提示有关CONFIG_DEBUG_SECTION_MISMATCH=y错误

      请将左侧条目添加到.config文件相应位置即可。

2.2如提示有关__modver_version_show错误

  1. ERROR: "__modver_version_show" [drivers/staging/rts5139/rts5139.ko]undefined!
  2. WARNING: modpost: Found 5 section mismatch(es).
  3. To see full details build your kernel with:
  4. 'make CONFIG_DEBUG_SECTION_MISMATCH=y‘
  5. make[1]: *** [__modpost] Error 1
  6. make: *** [modules] Error 2

   请将.config对应条目设置为CONFIG_RTS5139=N

3. 自定义简单模块

3.1 自定义模块的源码


#include <linux/module.h>
#include <linux/init.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\n");
}

module_init(hello_init);
module_exit(hello_exit);

3.2 自定义模块的Makefile


obj-m := hello.o
KERNELDIR := /usr/src/linux-source-x.x.x
PWD := $(shell pwd)
modules:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
	rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

需要注意tab与space的区别,行首缩进是制表符,不是多个连续空格。

3.3 编译自定义模块

确保Makefile文件编写正确,否则出现各种各样的奇葩问题,进入模块目录,$ make 即可,使用此Makefile不需要使用make -C ...M=...复杂编译命令。

3.4 测试自定义模块

  3.4.1启用tty1

   Ubuntu系统请按住ctrl+shift+ f1键启用tty1,普通shell看不到printk的输出,并切换为root

  3.4.2 测试加载模块

   $ insmod hello.ko

  3. 4.3测试移除模块

  $ rmmod hello.ko

 

抱歉!评论已关闭.