用vivi模拟向内核中加入自己的驱动模块
2009-05-21 19:04
288 查看
本文为《向vivi中添加自己的命令》的续写
由于vivi和Linux的配置机制相同,而且vivi的编译时间比linux少的多,为了节省时间我们以vivi为例,加入自己的模块。内核模块的加入与vivi的相当,这里以test.c等程序来模拟内核模块下的驱动程序,除此之外,两者大概要做的都是:修改顶层vivi/Makefile、修改vivi/drivers/Makefile、修改vivi/drivers/test/Makefile、修改vivi/drivers/test/cpu/Makefile、修改vivi/arch/Config.in、修改vivi/drivers/test/Config.in。
步骤一:
在vivi源码路径下drivers创建文件夹test名在此文件夹下创建如下目录结构:(创建件可用touch命令)
# cd /home/su/vivi
# mkdir drivers/test
#cd drivers
# mkdir test/cpu
# cd test
# touch Config.in Makefile test.c test_client.c test_ioctl.c test_proc.c test_queue.c
# touch cpu/Makefile cpu/cpu.c
步骤二:
修改所有.c源文件,输入类似如下内容,比如在test_client.c输入:
#include <printk.h>
void test_client(void)
{
printk("/ntest_client/n");
}
步骤三:
修改drivers/test/Config.in
# TEST driver configuration
mainmenu_option next_comment
comment 'TEST Driver'
bool 'TEST support' CONFIG_TEST
if [ "$CONFIG_TEST" = "y" ]; then
tristate 'TEST user-space interface' CONFIG_TEST_USER
bool 'TEST CPU' CONFIG_TEST_CPU
fi
endmenu
步骤四:
修改arch/config.in
在文件最后加入行:
source drivers/test/Config.in
步骤五:
修改drivers/test/Makefile
L_TARGET := test.a
obj-$(CONFIG_TEST) += test.o test_queue.o test_client.o
obj-$(CONFIG_TEST_USER) += test_ioctl.o
obj-$(CONFIG_PROC_FS) += test_proc.o
subdir-$(CONFIG_TEST_CPU) += cpu
include $(TOPDIR)/Rules.make
clean:
rm -f *.[oa] .*.flags
步骤六:
修改drivers/test/cpu/Makefile
SUB_DIR :=
MOD_SUB_DIR :=
ALL_SUB_DIRS :=
L_TARGET := test_cpu.a
obj-$(CONFIG_TEST_CPU) += cpu.o
include $(TOPDIR)/Rules.make
clean:
rm -f *.[oa] .*.flags
步骤七:
修改drivers/Makefile
在此文件的include $(TOPDIR)/Rules.make之前加入:
subdir-$(CONFIG_TEST) += test
步骤八:
修改顶层Makefile
在此文件的DRIVERS-$(CONFIG_MTD) += drivers/mtd/mtd.o之后加入以下两行:
DRIVERS-$(CONFIG_TEST) += drivers/test/test.a
DRIVERS-$(CONFIG_TEST_CPU) += drivers/test/cpu/test_cpu.a
步骤九:
新建文件include/testdriver.h,并输入如下内容:
#ifdef CONFIG_TEST
extern void test(void);
extern void test_queue(void);
extern void test_client(void);
#endif
#ifdef CONFIG_TEST_USER
extern void test_ioctl(void);
#endif
#ifdef CONFIG_PROC_FS
extern void test_proc(void);
#endif
#ifdef CONFIG_TEST_CPU
extern void cpu(void);
#endif
步骤十:
修改lib/command.c,在函数command_mytest中加入如下代码:
#ifdef CONFIG_TEST
test();
test_queue();
test_client();
#endif
#ifdef CONFIG_TEST_USER
test_ioctl();
#endif
#ifdef CONFIG_PROC_FS
test_proc();
#endif
#ifdef CONFIG_TEST_CPU
cpu();
#endif
步骤十一:
配置:make clean之后make menuconfig并选中新加入的配置选项
编译:make
烧录:load flash vivi x
测试:进入vivi,执行命令:mytest
可看到打印出类似下面的语句:
test_client
由于vivi和Linux的配置机制相同,而且vivi的编译时间比linux少的多,为了节省时间我们以vivi为例,加入自己的模块。内核模块的加入与vivi的相当,这里以test.c等程序来模拟内核模块下的驱动程序,除此之外,两者大概要做的都是:修改顶层vivi/Makefile、修改vivi/drivers/Makefile、修改vivi/drivers/test/Makefile、修改vivi/drivers/test/cpu/Makefile、修改vivi/arch/Config.in、修改vivi/drivers/test/Config.in。
步骤一:
在vivi源码路径下drivers创建文件夹test名在此文件夹下创建如下目录结构:(创建件可用touch命令)
# cd /home/su/vivi
# mkdir drivers/test
#cd drivers
# mkdir test/cpu
# cd test
# touch Config.in Makefile test.c test_client.c test_ioctl.c test_proc.c test_queue.c
# touch cpu/Makefile cpu/cpu.c
步骤二:
修改所有.c源文件,输入类似如下内容,比如在test_client.c输入:
#include <printk.h>
void test_client(void)
{
printk("/ntest_client/n");
}
步骤三:
修改drivers/test/Config.in
# TEST driver configuration
mainmenu_option next_comment
comment 'TEST Driver'
bool 'TEST support' CONFIG_TEST
if [ "$CONFIG_TEST" = "y" ]; then
tristate 'TEST user-space interface' CONFIG_TEST_USER
bool 'TEST CPU' CONFIG_TEST_CPU
fi
endmenu
步骤四:
修改arch/config.in
在文件最后加入行:
source drivers/test/Config.in
步骤五:
修改drivers/test/Makefile
L_TARGET := test.a
obj-$(CONFIG_TEST) += test.o test_queue.o test_client.o
obj-$(CONFIG_TEST_USER) += test_ioctl.o
obj-$(CONFIG_PROC_FS) += test_proc.o
subdir-$(CONFIG_TEST_CPU) += cpu
include $(TOPDIR)/Rules.make
clean:
rm -f *.[oa] .*.flags
步骤六:
修改drivers/test/cpu/Makefile
SUB_DIR :=
MOD_SUB_DIR :=
ALL_SUB_DIRS :=
L_TARGET := test_cpu.a
obj-$(CONFIG_TEST_CPU) += cpu.o
include $(TOPDIR)/Rules.make
clean:
rm -f *.[oa] .*.flags
步骤七:
修改drivers/Makefile
在此文件的include $(TOPDIR)/Rules.make之前加入:
subdir-$(CONFIG_TEST) += test
步骤八:
修改顶层Makefile
在此文件的DRIVERS-$(CONFIG_MTD) += drivers/mtd/mtd.o之后加入以下两行:
DRIVERS-$(CONFIG_TEST) += drivers/test/test.a
DRIVERS-$(CONFIG_TEST_CPU) += drivers/test/cpu/test_cpu.a
步骤九:
新建文件include/testdriver.h,并输入如下内容:
#ifdef CONFIG_TEST
extern void test(void);
extern void test_queue(void);
extern void test_client(void);
#endif
#ifdef CONFIG_TEST_USER
extern void test_ioctl(void);
#endif
#ifdef CONFIG_PROC_FS
extern void test_proc(void);
#endif
#ifdef CONFIG_TEST_CPU
extern void cpu(void);
#endif
步骤十:
修改lib/command.c,在函数command_mytest中加入如下代码:
#ifdef CONFIG_TEST
test();
test_queue();
test_client();
#endif
#ifdef CONFIG_TEST_USER
test_ioctl();
#endif
#ifdef CONFIG_PROC_FS
test_proc();
#endif
#ifdef CONFIG_TEST_CPU
cpu();
#endif
步骤十一:
配置:make clean之后make menuconfig并选中新加入的配置选项
编译:make
烧录:load flash vivi x
测试:进入vivi,执行命令:mytest
可看到打印出类似下面的语句:
test_client
相关文章推荐
- 如何把自己的驱动编译进内核或模块
- 【ZYNQ_LINUX】如何把自己的驱动编译进内核或模块(Kconfig和Makefile
- 基于linux2.6.31.14内核自己写虚拟摄像头驱动myvivi.c
- 如何把自己的驱动编译进内核或模块(Kconfig和Makefile)
- 如何把一个自己写的外部驱动模块编译添加到内核中 来自网络
- 如何把自己的驱动编译进内核或模块 .
- linux内核中,在/drivers/char目录的Kconfig文件中加入自己编写的新驱动,make menuconfig却不显示的问题
- 如何把自己的驱动编译进内核或模块(Kconfig和Makefile)
- 如何把自己的驱动编译进内核或模块
- 编译时向内核添加新设备 模块的方式动态的将驱动加入内核,但这种方式加入的驱动程序,当系统重新启动时, 还需要重新用模块的方式进行插入,如果是系统内常用的设备驱动采用这种方式进行加载, 就会很不方便。
- 如何把自己的驱动编译进内核或模块
- 内核裁剪,将自己写的驱动加入内核及按键驱动的代码(arm TQ2440)
- 如何把自己的驱动编译进内核或模块
- 如何把自己的驱动编译进内核或模块
- 如何把自己的驱动编译进内核或模块
- linux内核自己添加模块(内核版本:3.0.101)
- 自己动手编写FreeBSD内核防火墙模块
- linux驱动学习(二)——内核模块
- Linux内核驱动学习(三)----内核模块基础 | 设计 | 可选项
- 向内核添加自己的模块