模块化驱动动态加载
来源:互联网 发布:php http get请求 编辑:程序博客网 时间:2024/05/01 04:26
驱动开发中共一般有2中内核调试方式 :静态编译进内核& 动态模块加载。而调试方式有3中,一种是每次下载内核与文件系统,启动,调试, 另外一种是在运行中动态加载内核,还有一种是nfs网络启动。
在所有的方法中,动态加载模块的方法是最简单的。但是它主要需要编写一个makefile,但是也可以不写。一下是两种方法。
一。添加支持动态模块加载的内核和应用程序支持。
在make menuconfig中配置内核时选择:Loadable module support --->
[*] Enable loadable module support
[] Set version information on all module symbols (NEW)
[*] Kernel module loader (NEW)
并在应用程序配置中选择busybox下的insmod/rmmod/lsmod,
并选中: [*] Post 2.1 kernel modules。
二。逃避makefile
关于驱动模块的.c(例如mydriver.c)可这样编译,不需要单独写Makefile,就直接放到uClinux/linux2.4.x里面参与内核编译即可:
cp mydriver.c uClinux-dist/linux-2.4.x/drivers/char
然后修改uClinux-dist/linux-2.4.x/drivers/char/Makefile,
obj-y += mem.o tty_io.o n_tty.o tty_ioctl.o raw.o pty.o misc.o random.o mydriver.o
在最后加入mydriver.o
这样内核就会用正确的参数编译出mydriver.o。
然后把这个mydriver.o单独复制出来到uClinux-dist/romfs/usr下面,然后再把uClinux-dist/linux- 2.4.x/drivers/char/Makefile恢复回去,然后再重编内核,烧写,启动后执行insmod /usr/mydriver.o即可成功。再lsmod看看。
三。一个模块的makefile 内容
发现把驱动程序作为模块加载时,使用的也是虚拟地址,用了set_gpio_ctrl才通过。
编译模块驱动:
arm-linux-gcc -DMODULE -D__KERNEL__ -I/home/2.4.18-rmk7/include -c mydriver.c
编译应用程序:
arm-linux-gcc -o myapp myapp.c
看来还是写个Makefile方便
终端:
mount -t nfs -o rw 192.168.0.196:/home/work /mnt
cd /mnt/2.4.18.rmk7/user/mydrive
insmod mydriver.o
mknod /dev/test c 125 0
.'/myapp
- 模块化驱动动态加载
- 模块化驱动动态加载
- linux下驱动模块化编译,动态加载以及卸载
- linux下驱动模块化编译,动态加载以及卸载
- linux下驱动模块化编译,动态加载以及卸载
- Linux驱动开发之模块化加载方法
- 图解WildFly8.x模块化加载数据库驱动
- Extjs 模块化动态加载js实践
- java 使用类动态加载 实现模块化
- ZwSetSystemInformation 动态加载驱动
- 动态加载驱动-2
- 驱动动态加载
- 动态加载流驱动
- 动态加载驱动 DDK
- 关于动态加载/卸载驱动
- windows API 动态加载驱动
- 也谈流驱动的动态加载
- WinCE驱动的动态加载
- 传智播客.net培训415字符串练习:汉字时间转为阿拉伯数字时间
- 编程之美 2.1 求二进制中的1的个数
- Redis学习手册(服务器管理)
- 多线程中不使用的stop(),resume(),destroy(),suspend().原因
- Redis学习手册(虚拟内存)
- 模块化驱动动态加载
- Redis学习手册(持久化)
- Redis学习手册(主从复制)
- DirectFB教程导读-在屏幕中心画一条横线
- 编程之美 2.2 不要被阶乘吓到
- ASP.NET"正在中止线程"错误原因
- Android中自定义属性(attrs.xml,TypedArray的使用)
- 编程之美 2.4 1的数目
- LineDDA的使用方法(绘制复杂线条)