精华内容
下载资源
问答
  • linux下编译运行驱动

    万次阅读 2013-07-10 21:05:48
    linux下编译运行驱动 嵌入式linux下设备驱动的运行和linux x86 pc下运行设备驱动是类似的,由于手头没有嵌入式linux设备,先在vmware上的linux上学习驱动开发。 按照如下方法就可以成功编译出hello world模块驱动...

     

     

    linux下编译运行驱动

    嵌入式linux下设备驱动的运行和linux x86 pc下运行设备驱动是类似的,由于手头没有嵌入式linux设备,先在vmware上的linux上学习驱动开发。

    按照如下方法就可以成功编译出hello world模块驱动。

    1、首先确定本机linux版本

    怎么查看Linux的内核kernel版本?

    'uname'Linux/unix系统中用来查看系统信息的命令,适用于所有Linux发行版。配合使用'uname'参数可以查看当前服务器内核运行的各个状态。

    #uname -a

    Linux whh 3.5.0-19-generic #30-Ubuntu SMPTue Nov 13 17:49:53 UTC 2012 i686 i686 i686 GNU/Linux

     

    只打印内核版本,以及主要和次要版本:

    #uname -r

    3.5.0-19-generic

     

    要打印系统的体系架构类型,即的机器是32位还是64位,使用:

    #uname -p

    i686

     

    /proc/version 文件也包含系统内核信息:

    # cat /proc/version

    Linux version 3.5.0-19-generic(buildd@aatxe) (gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) ) #30-UbuntuSMP Tue Nov 13 17:49:53 UTC 2012

     

    发现自己的机器linux版本是:3.5.0-19-generic

    2、下载机器内核对应linux源码

    到下面网站可以下载各个版本linux源码https://www.kernel.org/

    如我的机器3.5.0版本源码下载地址为:https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.5.tar.bz2

    下载完后,找一个路径解压,如我解压到/linux-3.5/

    然后很重要的一步是:执行命令uname -r,可以看到Ubuntu的版本信息是3.5.0-19-generic

    。进入linux源码目录,编辑Makefile,将EXTRAVERSION =  修改为EXTRAVERSION= -19-generic

    这些都是要配置源码的版本号与系统版本号,如果源码版本号和系统版本号不一致,在加载模块的时候会出现如下错误:insmod: error inserting 'hello.ko': -1 Invalid module format

    原因很明确:编译时用的hello.kokenerl 不是我的pckenerl版本。

     

    执行命令cp /boot/config-3.5.0-19-generic ./config,覆盖原有配置文件。

    进入linux源码目录,执行make menuconfig配置内核,执行make编译内核。

     

     

     

    3、写一个最简单的linux驱动代码hello.c

     

    /*======================================================================

        Asimple kernel module: "hello world"

    ======================================================================*/

    #include <linux/init.h>

    #include <linux/module.h>

    MODULE_LICENSE("zeroboundaryBSD/GPL");

    static int hello_init(void)

    {

             printk(KERN_INFO"Hello World enter\n");

             return0;

    }

     

    static void hello_exit(void)

    {

             printk(KERN_INFO"Hello World exit\n ");

    }

     

    module_init(hello_init);

    module_exit(hello_exit);

     

    MODULE_AUTHOR("zeroboundary");

    MODULE_DESCRIPTION("A simple HelloWorld Module");

    MODULE_ALIAS("a simplestmodule");

     

    4、写一个Makefile对源码进行编译

    KERN_DIR = /linux-3.5

    all:

             make-C $(KERN_DIR) M=`pwd` modules

    clean:

             make-C $(KERN_DIR) M=`pwd` clean

     

    obj-m += hello.o

     

    5、模块加载卸载测试

    insmod hello.ko

    rmmod hello.ko

     

    然后dmesg|tail就可以看见结果了

                                 

     

    最后,再次编译驱动程序hello.c得到hello.ko。执行insmod ./hello.ko,即可正确insert模块。

     

    使用insmod hello.ko 将该Module加入内核中。在这里需要注意的是要用 su 命令切换到root用户,否则会显示如下的错误:insmod: error inserting 'hello.ko': -1 Operation not permitted

     

    内核模块版本信息的命令为modinfo hello.ko

    通过lsmod命令可以查看驱动是否成功加载到内核中

    通过insmod命令加载刚编译成功的time.ko模块后,似乎系统没有反应,也没看到打印信息。而事实上,内核模块的打印信息一般不会打印在终端上。驱动的打印都在内核日志中,我们可以使用dmesg命令查看内核日志信息。dmesg|tail

     

     

     

    可能还会遇到这种问题insmod: error inserting 'hello.ko': -1 Invalid module format

    dmesg|tail查看内核日志详细错误

    disagrees about version of symbolmodule_layout,详细看这里。

    http://www.ibm.com/developerworks/cn/linux/l-cn-kernelmodules/index.html

    X86上我的办法是:

    make -C/usr/src/linux-headers-3.5.0-19-generic SUBDIRS=$PWD modules

     

     

     

     

    展开全文
  • Da0tabot是用于 Web 爬虫、ETL、数据管道任务开发的高性能 Python 数据驱动编程框架。 特性: 数据驱动编程框架 基于协程的并行 基于类型和内容的函数路由 安装: pip install -U databot Databot is… ...

    前言

    Da0tabot是用于 Web 爬虫、ETL、数据管道任务开发的高性能 Python 数据驱动编程框架。

    特性:

    • 数据驱动编程框架

    • 基于协程的并行

    • 基于类型和内容的函数路由

    安装:

     pip install -U databot
    

    Databot is…

    简单
    每2秒加载一次CoinDesk比特币价格. 高级价格聚合案例参见 here.

    from databot.flow import Pipe, Timer
    from databot.botframe import BotFrame
    from databot.http.http import HttpLoader
    
    
    def main():
        Pipe(
            Timer(delay=2),  # send timer data to pipe every 2 sen
            "http://api.coindesk.com/v1/bpi/currentprice.json",  # send url to pipe when timer trigger
            HttpLoader(),  # read url and load http response
            lambda r: r.json['bpi']['USD']['rate_float'],  # read http response and parese as json
            print,  # print out
        )
    
        BotFrame.render('simple_bitcoin_price')
        BotFrame.run()
    
    main()
    

    流程图形化

    databot 生成的流程图:

    小编推荐一个学python的学习qun 740322234
    无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

    快速

    节点并行运行可以很好的处理流数据

    可视化

    执行函数: BotFrame.render(‘bitcoin_arbitrage’) Databot 将会把数据处理流程生成为 graphviz 图片:

    https://github.com/kkyon/databot/blob/master/examples/bitcoin_arbitrage.png

    可重放

    配置可重放模式: config.replay_mode=True 异常发生在第N步的时候,不用从第一步执行到第N步,Databot可以从完成的最近点(通常是第N-1步)重新开始执行,在开发阶段可以节约很多时间。

    展开全文
  • 嵌入式linux下设备驱动运行和linux x86 pc下运行设备驱动是类似的,由于手头没有嵌入式linux设备,先在vmware上的linux上学习驱动开发。 按照如下方法就可以成功编译出hello world模块驱动。 1、首先确定本机...

    嵌入式linux下设备驱动的运行和linux x86 pc下运行设备驱动是类似的,由于手头没有嵌入式linux设备,先在vmware上的linux上学习驱动开发。

    按照如下方法就可以成功编译出hello world模块驱动。

    1、首先确定本机linux版本

    怎么查看Linux的内核kernel版本?

    'uname'是Linux/unix系统中用来查看系统信息的命令,适用于所有Linux发行版。配合使用'uname'参数可以查看当前服务器内核运行的各个状态。

    #uname -a

    Linux whh 3.5.0-19-generic #30-Ubuntu SMPTue Nov 13 17:49:53 UTC 2012 i686 i686 i686 GNU/Linux

    只打印内核版本,以及主要和次要版本:

    #uname -r

    3.5.0-19-generic

    要打印系统的体系架构类型,即的机器是32位还是64位,使用:

    #uname -p

    i686 

    /proc/version 文件也包含系统内核信息:

    # cat /proc/version

    Linux version 3.5.0-19-generic(buildd@aatxe) (gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) ) #30-UbuntuSMP Tue Nov 13 17:49:53 UTC 2012 

    发现自己的机器linux版本是:3.5.0-19-generic

    2、下载机器内核对应linux源码

    到下面网站可以下载各个版本linux源码https://www.kernel.org/

    如我的机器3.5.0版本源码下载地址为:https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.5.tar.bz2

    下载完后,找一个路径解压,如我解压到/linux-3.5/

    然后很重要的一步是:执行命令uname -r,可以看到Ubuntu的版本信息是3.5.0-19-generic

    。进入linux源码目录,编辑Makefile,将EXTRAVERSION =  修改为EXTRAVERSION= -19-generic。

    这些都是要配置源码的版本号与系统版本号,如果源码版本号和系统版本号不一致,在加载模块的时候会出现如下错误:insmod: error inserting 'hello.ko': -1 Invalid module format。

    原因很明确:编译时用的hello.ko的kenerl 不是我的pc的kenerl版本。 

    执行命令cp /boot/config-3.5.0-19-generic ./config,覆盖原有配置文件。

    进入linux源码目录,执行make menuconfig配置内核,执行make编译内核。

     

    3、写一个最简单的linux驱动代码hello.c

     

    /*======================================================================

        Asimple kernel module: "hello world"

    ======================================================================*/

    #include <linux/init.h>

    #include <linux/module.h>

    MODULE_LICENSE("zeroboundaryBSD/GPL");

    static int hello_init(void)

    {

            printk(KERN_INFO"Hello World enter\n");

            return0;

    }

     

    static void hello_exit(void)

    {

            printk(KERN_INFO"Hello World exit\n ");

    }

     

    module_init(hello_init);

    module_exit(hello_exit);

     

    MODULE_AUTHOR("zeroboundary");

    MODULE_DESCRIPTION("A simple HelloWorld Module");

    MODULE_ALIAS("a simplestmodule");

     

    4、写一个Makefile对源码进行编译

    KERN_DIR = /linux-3.5

    all:

            make-C $(KERN_DIR) M=`pwd` modules

    clean:

            make-C $(KERN_DIR) M=`pwd` clean

     

    obj-m += hello.o

     

    5、模块加载卸载测试

    insmod hello.ko

    rmmod hello.ko 

    然后dmesg|tail就可以看见结果了

    Linux下编译运行驱动

    最后,再次编译驱动程序hello.c得到hello.ko。执行insmod ./hello.ko,即可正确insert模块。

    使用insmod hello.ko 将该Module加入内核中。在这里需要注意的是要用 su 命令切换到root用户,否则会显示如下的错误:insmod: error inserting 'hello.ko': -1 Operation not permitted

    内核模块版本信息的命令为modinfo hello.ko

    通过lsmod命令可以查看驱动是否成功加载到内核中

    通过insmod命令加载刚编译成功的time.ko模块后,似乎系统没有反应,也没看到打印信息。而事实上,内核模块的打印信息一般不会打印在终端上。驱动的打印都在内核日志中,我们可以使用dmesg命令查看内核日志信息。dmesg|tail

    可能还会遇到这种问题insmod: error inserting 'hello.ko': -1 Invalid module format

    用dmesg|tail查看内核日志详细错误

    disagrees about version of symbolmodule_layout,详细看这里。http://www.linuxidc.com/Linux/2013-07/87189.htm

    在X86上我的办法是:

    make -C/usr/src/linux-headers-3.5.0-19-generic SUBDIRS=$PWD modules

    转载于:https://www.cnblogs.com/dayuhope/p/3284744.html

    展开全文
  • Da0tabot是用于 Web 爬虫、ETL、数据管道任务开发的高性能 Python 数据驱动编程框架。**特性:** 数据驱动编程框架 基于协程的并行 基于类型和内容的函数路由 安装: pip install -U databot Databot is... 简单 ...

    前言

    Da0tabot是用于 Web 爬虫、ETL、数据管道任务开发的高性能 Python 数据驱动编程框架。
    **
    特性:**

    • 数据驱动编程框架
    • 基于协程的并行
    • 基于类型和内容的函数路由

    安装:

        pip install -U databot

    Databot is...

    简单

    每2秒加载一次CoinDesk比特币价格. 高级价格聚合案例参见 here.

    
    from databot.flow import Pipe, Timer
    from databot.botframe import BotFrame
    from databot.http.http import HttpLoader
    
    
    def main():
        Pipe(
            Timer(delay=2),  # send timer data to pipe every 2 sen
            "http://api.coindesk.com/v1/bpi/currentprice.json",  # send url to pipe when timer trigger
            HttpLoader(),  # read url and load http response
            lambda r: r.json['bpi']['USD']['rate_float'],  # read http response and parese as json
            print,  # print out
        )
    
        BotFrame.render('simple_bitcoin_price')
        BotFrame.run()
    
    main()```
    
    流程图形化
    
    databot 生成的流程图:  
    ![](https://yqfile.alicdn.com/bf817f05db212da5438a3d02eb60c10b304a0862.png)
    
    
    >小编推荐一个学python的学习qun 740322234
    无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
    
    
    **快速**
    
    节点并行运行可以很好的处理流数据
    
    **可视化**
    
    执行函数: BotFrame.render('bitcoin_arbitrage') Databot 将会把数据处理流程生成为 graphviz 图片:
    
    https://github.com/kkyon/databot/blob/master/examples/bitcoin_arbitrage.png
    
    **可重放**
    
    配置可重放模式: config.replay_mode=True 异常发生在第N步的时候,不用从第一步执行到第N步,Databot可以从完成的最近点(通常是第N-1步)重新开始执行,在开发阶段可以节约很多时间。
    
    展开全文
  • Docker Macvlan网络驱动使用详解 能够将容器化应用连接到外部系统以及物理网络的能力是非常必要的常见的例子是部分容器化的应用应用中已容器化的部分需要与那些运行在物理网络和 VLAN 上的未容器化部分进行通信 ...
  • anydac有没有人用过? 用来连接mdb发布后是不是不需要装驱动.不用要带dll等? [b]有没有不需装驱动并不带dll的数据库? ASqlite3Components这个听说bug多啊[/b] .
  • 今早来了发现不能上网,好不容易搞好驱动可以上网了,发现昨儿运行好好的软件运行内部错误了,百度完正在修复VS,有人可以告诉我应该怎么解决这个问题吗?灰常灰常感谢~~~ system.security.cryptography system....
  • 1,右键开始菜单图标,选择[运行],或者按快捷键Win+R 2,输入start \192.168.1.250 3、打开共享电脑后,右键需要连接的共享文件,选择**[映射网络驱动器]** 4、然后给网络驱动器分配一个驱动号,也就是盘符 5、点击完成...
  • 驱动学习----驱动应该怎么学说明概念的理解微内核与宏内核驱动分类常见驱动安全性问题驱动应该这么学先学好C语言掌握相关预备知识驱动学习阶段 说明 本文是朱老师系列课程学习笔记 概念的理解 驱动的上面是系统调用 ...
  • 驱动应该怎么学习?

    2016-05-05 19:34:00
    宏内核:将内核从整体上作为一个大过程实现,并同时运行一个单独的地址空间,相互之间直接调用函数,简单高效。紧耦合。 微内核:功能被划分为独立的过程,过程间通过IPC来通信,模块化程度高, 一个服务失效不会...
  • 1、驱动应该怎么

    2019-09-26 21:50:19
    一、Linux体系架构 1、分层思想 2、驱动的上面是系统调用API ...(1)宏内核(又称为单内核):将内核从整体上作为一个大过程实现,并同时运行在一个单独的地址空间。所有的内核服务都在一个地...
  • 开发测试驱动程序一般分为4步: 1,指出需要的新特性。可以记录下来,然后为其编写一个测试 2,编写特性的概要代码,这样程序就可以运行而没有任何语法等方面的错误,但是测试会失败。看到测试失败是很重要的,...
  • 一..驱动应该怎么

    2019-09-29 15:26:45
    什么是驱动1_2 1、linux体系架构 (1)分层思想 (2)驱动的上面是系统调用API (3)驱动的下面是硬件 (4)驱动自己本身也是分层的 2.模块化设计 2.1、微内核和宏内核 (1)宏内核(又称为单内核):将内核从整体...
  • 安装win7系统后,有用户遇到了系统上没有网卡驱动的问题,win7没有网卡驱动怎么安装?其实我们可以使用第三方软件来进行安装,或可以直接在电脑中进行搜索安装即可。具体win7没有网卡驱动的安装方法见下面介绍吧~ win...
  • 这是因为大多数计算机都在Windows上运行,并且大多数拇指驱动器附带支持Windows环境的格式。除非它是专门为在macOS上运行而设计的,否则您需要重新格式化闪存驱动器。 让我们看看如何为Mac格式化拇指驱动器。 USB ...
  • javax.servlet.ServletException: 加载数据库驱动失败! servlets.regservlet.init(regservlet.java:128) javax.servlet.GenericServlet.init(GenericServlet.java:212) org.apache.catalina.valves....
  • AS怎么在真机上运行

    千次阅读 2020-02-23 14:29:36
    AS如何在真机上运行 先检查AS里面有没有安装谷歌的驱动Gogle USB Driver 然后在手机开发者选项里允许usb调试,并且调成只充电。插上手机AS会显示你手机的型号。 ...
  • 事件的分类(有的地方说是事件源分类法分出的,这个个人不赞同,两个是不同的东西怎么可以这么搞): 鼠标事件: 当用户在页面上用鼠标点击页面元素时,对应的dom节点会触发鼠标事件,主要有click、dblclick、...
  • Check failed: cudaSuccess == ...练习百度的Paddle的机器翻译示例时,在docker中运行代码,出现这个错误,不知道该怎么解决。。。 ![图片说明](https://img-ask.csdn.net/upload/201805/03/1525348924_78151.png)
  • 查看内核已存在 驱动cat /lib/modules/$(uname -r)/modules.builtin 一、Windows 环境变量  1、在Windows 系统下,很多软件安装都需要配置环境变量,比如 安装 jdk ,如果不配置环境变量,在非软件安装的目录下...
  • 驱动程序运行一段时间之后,就容易报这种错误重启。 [ 122.377666] **Unable to handle kernel paging request at virtual address 4d118106** [ 122.384417] pgd = d497c000 [ 122.387603] [4d118106] *pgd=...
  • 问题很多情况下,我们需要了解到我们的服务器是运行在虚拟机环境还是直接运行在实体机器上,因为我们了解到这些才能更好的实现我们的驱动程序。当然我们可以有很多中方法来检测我们的远程服务器是不是一台虚拟机节点...
  • 准备材料: 内核包 android-kernel-samsung-dev.tar.bz2 ... 开发板运行的内核,必须跟驱动编写所使用的是同一个内核包 书籍推荐: Linux设备驱动程序(中文版第三版) -歪果仁 深入Linux设备驱动程序内核机制

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,138
精华内容 455
关键字:

怎么运行驱动