Chinaunix首页 | 论坛 | 博客
  • 博客访问: 122471
  • 博文数量: 41
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 306
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-01 10:41
文章分类

全部博文(41)

文章存档

2011年(1)

2009年(40)

我的朋友

分类:

2009-04-10 17:45:53

1)编写内核态程序,hello.c,功能:插入时打印输出Hello,world,退出时打印输出Goodbye, world

 

参考答案:

#include
#include
MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
    printk(KERN_EMERG "Hello, world\n");
    return 0;
}

static void hello_exit(void)
{
    printk(KERN_EMERG"Goodbye, world\n");
}

module_init(hello_init);
module_exit(hello_exit);


2)编写对映的Makefile,执行后生成ko模块,文件存放目录与hello.c一致

 

参考答案:

obj-m := hello.o
KERNELDIR := /lib/modules/2.6.9-42.EL/build
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

 

 

3)编译hello.c为内核模块程序,并将内核模块插入到modules中,观察结果


参考答案:

make

insmod hello.ko

 

 

4)用lsmod查看目前的模块


参考答案:

lsmod

 


5)用modinfo查看hello模块


参考答案:

modinfo hello.ko

 


6)列出所有的模块文件


参考答案:

modprobe -l

 


7)列出所有的模块信息


参考答案:

modprobe -c

 


8)升级内核redhat es4(2.6.9)-->2.6.23

8.1)删除以前留下的.o文件
8.2)以菜单方式进行内核方式选择
8.3)清除掉以前的.o文件
8.4)制作出核心文件
8.5)制作出模组相关的文件
8.6)安装模组
8.7)产生initrd文件
8.8)安装核心到boot
8.9)编辑menu.lst,加入新核心选项

参考答案:

cd linux-2.6.23/

make mrproper

make menuconfig


保存退出
vi .config


make clean


make bzImage

make modules

make modules_install

mkinitrd /boot/initrd-2.6.23.img 2.6.23

make install

 

/boot/grub/menu.lst加入以下内容:

title ckhitler Kernel (2.6.23)
root (hd0,1)
kernel /boot/bzImage-2.6.23 ro root=LABEL=/
initrd /boot/initrd-2.6.23.img

 

1)编写内核态程序,hello.c,功能:插入时打印输出Hello,world,退出时打印输出Goodbye, world

 

参考答案:

#include
#include
MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)
{
    printk(KERN_EMERG "Hello, world\n");
    return 0;
}

static void hello_exit(void)
{
    printk(KERN_EMERG"Goodbye, world\n");
}

module_init(hello_init);
module_exit(hello_exit);


2)编写对映的Makefile,执行后生成ko模块,文件存放目录与hello.c一致

 

参考答案:

obj-m := hello.o
KERNELDIR := /lib/modules/2.6.9-42.EL/build
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

 

 

3)编译hello.c为内核模块程序,并将内核模块插入到modules中,观察结果


参考答案:

make

insmod hello.ko

 

 

4)用lsmod查看目前的模块


参考答案:

lsmod

 


5)用modinfo查看hello模块


参考答案:

modinfo hello.ko

 


6)列出所有的模块文件


参考答案:

modprobe -l

 


7)列出所有的模块信息


参考答案:

modprobe -c

 


8)升级内核redhat es4(2.6.9)-->2.6.23

8.1)删除以前留下的.o文件
8.2)以菜单方式进行内核方式选择
8.3)清除掉以前的.o文件
8.4)制作出核心文件
8.5)制作出模组相关的文件
8.6)安装模组
8.7)产生initrd文件
8.8)安装核心到boot
8.9)编辑menu.lst,加入新核心选项

参考答案:

cd linux-2.6.23/

make mrproper

make menuconfig


保存退出
vi .config


make clean


make bzImage

make modules

make modules_install

mkinitrd /boot/initrd-2.6.23.img 2.6.23

make install

 

/boot/grub/menu.lst加入以下内容:

title ckhitler Kernel (2.6.23)
root (hd0,1)
kernel /boot/bzImage-2.6.23 ro root=LABEL=/
initrd /boot/initrd-2.6.23.img

 

 

9)安装grub软件到/dev/sda

参考答案:
grub-install /dev/sda

 


10)进入grub的shell
10.1)先设定/boot目录的那个 partition
10.2)搜索stage1
10.3)搜索内核文件
10.4)安装grub到mbr

参考答案:

grub

root (hd0,0)

find /boot/grub/stage1

find /boot/vmlinuz-2.6.9-42.EL

setup (hd0)

阅读(566) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~