openwrt系统之字符设备驱动软件包加载、测试程序加载
、首先将软件包(如mydrv)放到ubuntu虚拟机openwrt/trunk/package/kernel/目录下 、回到openwrt/trunk/目录下,make menuconfig进行配置,把我们复制的软件包编译进去
Kemel modules -> Other modules -> kmod-mydrv(按y选中)保存退出 、然后在当前目录执行make package/kernel/mydrv/compile V= 、编译结束后,固件在openwrt/trunk/bin/ramips/packages/base目录下
kmod-mydrv_1.10.36-1_ramips_24kec.ipk 、执行make 得到OpenWrt系统固件位于penwrt/trunk/bin/ramips下,
openwrt-ramips-rt305x-mpr-a2-squashfs-sysupgrade.bin
、烧写固件进入开发板,再加载我们的模块.ipk文件(使用ssh网络服务) 、进入开发板系统文件找到你加载的模块位置文件夹,进行ipk的安装
opkg intall kmod-mydrv_1.10.36-1_ramips_24kec.ipk 、安装完成后,到/lib/modules/3.14./下找到我们的驱动mydrv.ko 、加载驱动 insmod mydrv.ko 、卸载驱动 rmmod mydir.ko 驱动开机自动加载
虽然我们通过 opkg insall 得到了.ko 为后缀的驱动模块,但是每次要使用都得进行
insmod,比较麻烦,我们可以让系统开机后自动的加载该驱动模块。
首先进入到特定的目录:
cd /etc/modules.d
然后创建一个文件并且写入一些信息
vi -mydrv 说明: 表示不使用外接 usb 类的自启动程序,分隔符‘-’后面接
驱动模块名称!
在创建的该文件中写入: mydrv 即驱动的名称。
最后,必须保证 mydrv.ko文件即我们的驱动模块文件放在: /lib/modules/3.14./
好的,重新启动系统即可: reboot
可以通过命令查询当前已经加载的驱动模块:lsmod 应用程序软件包测试(也就是通过编写另外一个程序来调用驱动程序,这属于嵌入式应用层,而上面属于驱动层) 、首先将软件包(如mydrv_app)放到ubuntu虚拟机openwrt/trunk/package/目录下 、回到openwrt/trunk/目录下,make menuconfig进行配置,把我们复制的软件包编译进去
Utilitties -> mydrv_app (按y选中)保存退出 、然后在当前目录执行
make package/mydrv_app/compile V=
make package/mydrv_app/install V=
make package/index V= 、编译结束后,固件在openwrt/trunk/bin/ramips/packages/base目录下
mydrv_app_1_ramips_24kec.ipk 、执行make 得到OpenWrt系统固件位于penwrt/trunk/bin/ramips下,
openwrt-ramips-rt305x-mpr-a2-squashfs-sysupgrade.bin
、烧写固件进入开发板,再加载我们的模块.ipk文件(使用ssh网络服务) 、进入开发板系统文件找到你加载的模块位置文件夹,进行ipk的安装
opkg intall kmod-mydrv_1.10.36-1_ramips_24kec.ipk 、安装完成后,到/lib/modules/3.14./下找到我们的驱动mydrv.ko 、加载驱动 insmod mydrv.ko 、进入开发板系统文件找到你加载的模块位置文件夹,进行ipk的安装
opkg intall kmod-mydrv_app_1.10.36-1_ramips_24kec.ipk 、安装完成后根目录运行应用程序mydrv_app 、卸载驱动 rmmod mydir.ko
openwrt系统之字符设备驱动软件包加载、测试程序加载的更多相关文章
- Linux字符设备驱动框架
字符设备是Linux三大设备之一(另外两种是块设备,网络设备),字符设备就是字节流形式通讯的I/O设备,绝大部分设备都是字符设备,常见的字符设备包括鼠标.键盘.显示器.串口等等,当我们执行ls -l ...
- LDD3 字符设备驱动简单分析
最近在看LDD3,理解了一下,为了加深自己的印象,自己梳理一下.我用的CentOS release 6.6 (Final)系统. 一.编写编译内核模块的Makefile 以下是我用的Makefile ...
- Linux应用程序访问字符设备驱动详细过程【转】
本文转载自:http://blog.csdn.net/coding__madman/article/details/51346532 下面先通过一个编写好的内核驱动模块来体验以下字符设备驱动 可以暂时 ...
- 深入理解Linux字符设备驱动
文章从上层应用访问字符设备驱动开始,一步步地深入分析Linux字符设备的软件层次.组成框架和交互.如何编写驱动.设备文件的创建和mdev原理,对Linux字符设备驱动有全面的讲解.本文整合之前发表的& ...
- Linux字符设备驱动结构(一)--cdev结构体、设备号相关知识机械【转】
本文转载自:http://blog.csdn.net/zqixiao_09/article/details/50839042 一.字符设备基础知识 1.设备驱动分类 linux系统将设备分为3类:字符 ...
- Linux驱动设计——字符设备驱动(一)
Linux字符设别驱动结构 cdev结构体 struct cdev { struct kobject kobj; struct module *owner; const struct file_ope ...
- 【转】linux设备驱动程序之简单字符设备驱动
原文网址:http://www.cnblogs.com/geneil/archive/2011/12/03/2272869.html 一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用 ...
- 字符设备驱动、平台设备驱动、设备驱动模型、sysfs的比较和关联
转载自:http://www.kancloud.cn/yueqian_scut/emlinux/106829 学习Linux设备驱动开发的过程中自然会遇到字符设备驱动.平台设备驱动.设备驱动模型和sy ...
- 使用内核定时器的second字符设备驱动及测试代码
驱动: #include <linux/kernel.h> #include <linux/module.h> #include <linux/fs.h> #inc ...
随机推荐
- Android抓包解析全过程
需求原因 在android开发中,遇到socket编程,无法从log日志中查看到与之通讯的socket发送和返回的数据包是什么,这里介绍一个工具,tcpdump工具和wireshark工具查看抓到的内 ...
- java中的静态初始化块
Java 中可以通过初始化块进行数据赋值.如: 在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块.如果使用 static 修饰初始化块,就称为静态初始化块. 需要特别注意: ...
- PHP: 异常exception
异常最常见于SDK调用中,函数执行失败时抛出异常,顺带错误码和错误信息. 先来看下PHP的异常处理相关函数: public Exception::__construct() ([ string $me ...
- .Cannot create an NSPersistentStoreCoordinator with a nil model
今天用coredata事,忽然遇到这个问题:找了一会终于发现问题所在,与大家分享一下 导致这个问题的原因是因为找不到.xcdatamodeld所致,不同的人可能遇到的问题不同 可能原因1: NSURL ...
- 在Linux服务器上增加硬盘没那么简单【转】
运维案例:HP服务器,LINUX系统在保障数据的前提下扩展/home分区 部门需求:研发部门提出需要在现有的服务器上扩容磁盘空间,以满足开发环境的磁盘需求.现有空间1.6T需要增加到2T. 需求调查分 ...
- JSP注释及scriptlet <%局部%><%!全局%><%=输出%>
显示注释: <!--注释内容-->> 隐式注释: 1. // 2./* */ 3. <%-- 注释内容--%> <!-- 这个注释客户端就可以看见 --> & ...
- 二分三角形的时候尤其需要注意!!! HDU 5115 二分+模拟
题目大意:http://blog.csdn.net/snowy_smile/article/details/49535301 思路:分类讨论,分别在[1,2].(2,3).[3,4).[4,1]相遇, ...
- think in uml 2.1
业务建模
- Android BuildConfig.DEBUG的妙用
在Android开发中,我们使用android.util.Log来打印日志,方便我们的开发调试.但是这些代码不想在发布后执行,我们并不想在软件发布后调试日志被其他开发者看到,现在我的方法是设置一个全局 ...
- 产生一个int数组,长度为100,并向其中随机插入1-100,不重复
#define RANDOM(X) (rand() % X + 1) int main() { //标志数组 ] = {}; ] = {}; //默认的随机数种子是1,这样的话,每次执行这个程序都会得 ...