Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1276631
  • 博文数量: 213
  • 博客积分: 7590
  • 博客等级: 少将
  • 技术积分: 2185
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-31 17:31
个人简介

热爱开源,热爱linux

文章分类

全部博文(213)

文章存档

2018年(4)

2017年(1)

2015年(1)

2014年(5)

2013年(2)

2012年(2)

2011年(21)

2010年(82)

2009年(72)

2008年(23)

分类: LINUX

2010-09-13 15:23:39


学习了Makefile和Kconfig,我觉的应该将一个模块编到内核中去,在编译内核的时候直接就编译到内核中去,为此我测试了一下将hello.c以模块的形式编译到内核(只是测试一下)中去。下面就编译过程总结一下
1.首先我到
下载最新版本的内核2.6.35.4
2.将下载到的内核linux-2.6.35.4.tar.bz2复制到/usr/src/目录下,利用命令sudo tar xjvf
linux-2.6.35.4.tar.bz2解压所下载的内核代码得到linux-2.6.35.4
3.进入到linux-2.6.35.4中,进入drivers目录,创建目录ceagleDriver,在driver目录下的Makefile中加入下面语句

# CaoJiangfeng driver start
obj-y += ceagleDriver/
# CaoJiangfeng driver end


在Kconfig目录下加入下列语句:

# CaoJiangfeng hello start
source "drivers/ceagleDriver/Kconfig"
# CaoJiangfeng hello end


进入ceagleDriver目录,在此目录下创建Makefile和Kconfig文件
在Makefile中添加下面语句

obj-$(CONFIG_HELLO_TEST)+=hello.o


在Kconfig中加入下列语句

menu "CaoJiangfeng hello Test"
config HELLO_TEST
tristate "hello test support"
endmenu

4
向ceagleDriver中加入hello.c文件,文件内容如下:

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/proc_fs.h>
int add(int i,int j)
{
    return (i+j);    
}
void fun()
{
    printk("This is in fun() function\n");
}

static int __init hello_init(void)
{
        fun();
    printk(KERN_INFO"<1>Hello module!\n");
    printk(KERN_INFO"<1>This is my first time compile a module in kernel!\n");
    printk(KERN_INFO"<2>5+6=%d\n",add(5,6));
    return 0;
}

static void __exit hello_exit(void)
{
    printk(KERN_INFO"Leaving the kernel!Byebye!\n");
}
MODULE_LICENSE("BSD/GPL");//Check if the code support the protocol


module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("cjf");


5下面就可以编译内核了,进入linux-2.6.35.4目录,依次执行下面语句

sudo make menuconfig(配置内核参数,如果只是尝试,可以忽略,如果想让其做服务器,就应该手动配置,可参考这个网站http://lamp.linux.gov.cn/Linux/kernel_options.html)

sudo make dep //这一步有时是不需要的,因为我在编译时就不需要,系统直接提示:unessary

sudo make clean //做一点清除工作,把没用的中间文件删除掉

sudo make
sudo make modules //编译模块

sudo make modules_install //安装模块

sudo mkinitramfs -o /boot/initrd-2.6.35.4.img 2.6.35.4 //生成内核镜像文件

sudo make install

6.修改grub.cfg
进入目录/boot/grub,打开文件grub.cfg,向里面加入下面语句

### END /etc/grub.d/05_debian_theme ### 在该句下面加入
 
menuentry 'Ubuntu,Linux 2.6.35' --class ubuntu --class gnu-linux --class gnu --class os {
         recordfail
         insmod ext2
         set root='(hd0,9)'
         search --no-floppy --fs-uuid --set 5a65608c-2f48-4a5d-b840-9351ed0 c709f
         linux /boot/vmlinuz-2.6.35.4 root=UUID=5a65608c-2f48-4a5d-b840-9 351ed0c709f ro quiet splash
         initrd /boot/initrd-2.6.35.4.img
 }
### BEGIN /etc/grub.d/10_linux ###


7.重启计算机,选择进入linux 2.6.35.4(如果不出什么意外的话)就可以进入新编译的内核里了
注意:hello模块只是和系统一起编译了,并没有插入到内核中,目前还只能手动插入
阅读(913) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-09-13 23:50:28

我正需要这样的文章。。