一、编写Linux驱动程序的步骤

第1 步:建立Linux 驱动骨架(装载和卸载Linux 驱动)

骨架部分主要是Linux驱动的初始化和退出函数,代码如下:

#include <linux/module.h>
#include <linux/init .h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/miscdevice.h>
#include <asm/uaccess .h>
// 初始化Linux 驱动
static int word_count_init(void)

{

//输出日志信息

printk(“work_count_init_success\n”);

return 0;

}

//退出Linux 驱动
static void word_count_exit(void)
{

// 输出日志信息
printk (”word_count_init_exit_success\n”);
}

// 注册初始化Linux 驱动的函数
module_init(word_count_init);

//注册退出Linux 驱动的函数
module_exit (word_count_exit);

第2 步:注册和注销设备文件

# insmod word_count.ko       //安装Linux驱动

# lsmmod | grep word_count      //查看word_count 是否成功安装

# rmmod word_count      //卸载Linux 驱动

# dmesg | grep word_count | tail –n 2        //查看由Linux 驱动输出的日志信息.

也可以执行下面的命令获取自Linux 驱动输出的日志信息。

# cat /var/log/syslog | grep word_count | tail -n 2

第3 步:指定与驱动相关的信息

模块作者:使用MODULE_AUTHOR 宏指定。
模块描述:使用MODULE_DESCRIPTION 宏指定。
模块别名:使用MODULE_ALIAS 宏指定。
开源协议: 使用MODULE_LICENSE 宏指定。

第4 步:指定回调函数

不管Linux 驱动程序的功能多么复杂还是多么“酷”,都必须允许用户空间的应用程序与内核空间的驱动程序进行交互才有意义。而最常用的交互方式就是读写设备文件。通过file_operations.read 和file_operations. write 成员变量可以分别指定读写设备文件要调用的回调函数指针。

第5 步:编写业务逻辑

第6 步:编写Makefile 文件

第7 步:编译Linux 驱动程序

第8 步:安装和卸载Linux 驱动

在使用modprobe 命令装载驱动模块之前, 需要先使用 depmod 命令检测Linux驱动模块的依赖关系。

使用- depmod 命令检测完依赖关系后,就可以调用ufodprobe 命令装载Linux 驱动。

# modprobe word_count

如果将Linux 驱动编译进内核,只要Linux 使用该内核,驱动程序就会自动装载。如果Linux
驱动程序以模块单独存在, 需要使用insmod 或modprobe 命令装载Linux 驱动模块,使用rmmod
命令卸载Linux 驱动模块。
     上面8 步中的前5 步是关于如何编写Linux 驱动程J字的,通过后3 步可以使Linux 驱动正常工作。

Linux下 JNI的使用

学习Android其中涉及对JNI的使用,对于这种跨语言的调用真没有见过,Java也都是最近才学的更别说对JNI的了解了,

JNI的使用对于Android来说又是十分的重要和关键。那么到底Java到底是如何调用C/C++的,通过网络达人的总结中学习,自己也顺便总结一下这个学习的过程。

什么是JNI

JNI是Java native interface的简写,可以译作Java原生接口。Java可以通过JNI调用C/C++的库,这对于那些对性能要求比较高的Java程序无疑是一个福音。JNI是Java与C/C++交互的接口。

使用JNI也是有代价。大家都知道JAVA程序是运行在JVM之上的,可以做到平台无关。但是如果Java程序通过JNI调用了原生的代码(比如c/c++等),则Java程序就丧失了平台无关性。最起码需要重新编译原生代码部分。所以应用JNI需要好好权衡,不到万不得已,请不要选择JNI,可以选择替代方案,比如TCP/IP进行进程间通讯等等。这也是为什么谷歌的Android平台的底层虽然用JNI实现,但是他不建议开发人员用JNI来开发Android上面的应用的原因。将会丧失Android上面的应用程序平台无关性。

第六章 第一个Linux驱动程序: 统计单词个数的更多相关文章

  1. 第六章 第一个Linux驱动程序:统计单词个数

    现在进入了实战阶段,使用统计单词个数的实例让我们了解开发和测试Linux驱动程序的完整过程.第一个Linux驱动程序是统计单词个数. 这个Linux驱动程序没有访问硬件,而是利用设备文件作为介质与应用 ...

  2. 第六章第一个linux个程序:统计单词个数

    第六章第一个linux个程序:统计单词个数 从本章就开始激动人心的时刻——实战,去慢慢揭开linux神秘的面纱.本章的实例是统计一片文章或者一段文字中的单词个数.  第 1 步:建立 Linu x 驱 ...

  3. 第6章 第一个Linux驱动程序:统计单词个数

    编写一个Linux的一般步骤: 第1步:建立Linux驱动骨架(装载和卸载Linux驱动) 第2步:注册和注销设备文件 第3步:指定和驱动相关的信息 第4步:指定回调函数 第5步:编写业务逻辑 第6步 ...

  4. NOIP200107统计单词个数

    NOIP200107统计单词个数 难度级别: A: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 给出一个长度不超过200的由 ...

  5. NOIP2001 统计单词个数

    题三 统计单词个数(30分) 问题描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k&l ...

  6. Codevs_1040_[NOIP2001]_统计单词个数_(划分型动态规划)

    描述 http://codevs.cn/problem/1040/ 与Codevs_1017_乘积最大很像,都是划分型dp. 给出一个字符串和几个单词,要求将字符串划分成k段,在每一段中求共有多少单词 ...

  7. Codevs 1040 统计单词个数

    1040 统计单词个数 2001年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出一个长度不超过200的 ...

  8. codevs1040统计单词个数(区间+划分型dp)

    1040 统计单词个数 2001年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Description 给出一个长度不超 ...

  9. [luogu]P1026 统计单词个数[DP][字符串]

    [luogu]P1026 统计单词个数 题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1&l ...

随机推荐

  1. MySQL EXPLAIN 命令: 查看查询执行计划

    MySQL 的 EXPLAIN 命令可以查看SELECT语句的执行的计划,是 MySQL 查询优化的必备工具. 通过执行计划可以了解查询方式.索引使用情况.需要扫描的数据量以及是否需要临时表或排序操作 ...

  2. python装饰器2:类装饰器

    装饰器1:函数装饰器 装饰器2:类装饰器 装饰器3:进阶 本文是装饰器相关内容的第二篇,关于类装饰器. "类装饰器"有两种解读方式:用来装饰类的装饰器:类作为装饰器装饰其它东西.你 ...

  3. Nmap 命令操作详解

    首先在安装nmap 稳定版 https://nmap.org/download.html 选择安装目录 通过cmd  去使用也可以在 安装目录中找到 进行可视化操作 以下是nmap 命令 -sT TC ...

  4. 【worker】js中的多线程

    因为下个项目中要用到一些倒计时的功能,所以就提前准备了一下,省的到时候出现一下界面不友好和一些其他的事情.正好趁着这个机会也加深一下html5中的多线程worker的用法和理解. Worker简介 J ...

  5. python文件夹copy器(多进程版)

    本节的练习的要求如下: 输入要拷贝文件夹的文件名称 读取该文件夹下的所有文件 启动5个进程来拷贝文件夹,将拷贝成功的文件名称放入队列中 主进程中显示文件拷贝的进度 代码如下: import multi ...

  6. 二、Laravel手动下载安装及初始化配置(此处以Laravel5.2为例)

    1.下载安装Laravel5.2的几种方法 —— 一键安装包下载: —— http://www.golaravel.com/download/ —— github下载 —— https://githu ...

  7. angular select2 下拉单选和多选的取值赋值

    官网:http://select2.github.io/examples.html 兼容性: 引入文件 /select2.min.js /select2.min.css html <select ...

  8. URL 与 URI 介绍

    URL: 统一资源定位符 ( Uniform Resource Locator ) URI: 统一资源标识符 ( Uniform Resource Identifier ) URL 地址:https: ...

  9. 洛谷P4588 [TJOI2018]数学计算(线段树)

    题意 题目链接 Sol TJOI怎么全是板子题 对时间开个线段树,然后就随便做了.... #include<bits/stdc++.h> using namespace std; cons ...

  10. maven将依赖依赖打包到jar中

    通过maven-assembly-plugin插件可以实现将依赖jar包打包到自己的jar包中的需求,只需要在pom.xml中配置该插件即可,配置如下: <build> <plugi ...