- 博客(59)
- 资源 (1)
- 收藏
- 关注
原创 Linux的内存映射之mmap
共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据: 一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重新建立共享内存区域。而是保持共享区域,直到通...
2019-06-18 17:18:46
367
原创 Linux内核开发常见的函数
做Linux驱动开发经常要使用到内核相关的函数,本篇只要介绍在做驱动开发的过程中用到的内核函数,为以后开发查询提供方便。本篇覆盖函数如下copy_from_user与copy_to_user函数down_interruptible与down函数writeX与readX宏函数1. copy_from_user与copy_to_user函数copy_from_user:从用户空间拷贝数据...
2019-06-18 14:06:05
3033
原创 嵌入式Linux的内核编译
实验环境VMware Workstation PlayerUbuntu16.04kernel-3.2.tar.bz2Linux内核编译在ubuntu上编译嵌入式Linux内核,需要大家提前安装好交叉编译工具链,在此就不再赘述。编写Linux内核需要内核源码和内核编译配置文件kernel_config,如下图:具体编译步骤如下:1.解压内核源码tar -jxvf kernel...
2019-06-12 18:31:24
2056
1
原创 Linux的ubifs文件系统制作
UBIFS是UBI file system的简称,用于裸的flash设备,作为jffs2的后继文件系统之一。UBIFS通过UBI子系统处理与MTD设备之间动作。UBIFS文件系统更适合MLCNAND FLASH。需要注意的是UBIFS并不是为SSD,MMC,SD,Compact Flash等之类的基于flash的存储设备,其是针对于裸flash设备。1.UBIFS简介JFFS2和UBIFS最大...
2019-06-12 14:27:32
1188
原创 内核与用户态进程间通讯之Netlink
Netlink是linux提供的用于内核和用户态进程之间的通信方式。但是注意虽然Netlink主要用于用户空间和内核空间的通信,但是也能用于用户空间的两个进程通信。只是进程间通信有其他很多方式,一般不用Netlink。除非需要用到Netlink的广播特性时。一般来说用户空间和内核空间的通信方式有三种:/proc、ioctl、Netlink。而前两种都是单向的,但是Netlink可以实现双工通信。...
2019-06-10 14:53:14
2232
1
原创 嵌入式Liunx移植USB随身WIFI(AP模式)
360随身WIFI支持STA和AP两种模式,其中STA模式使其充当一个无线网卡连接指定的WIFI进行上网,而AP模式下相当于一个热点自己向别人提供WIFI。在上篇中我们介绍了STA模式,本篇我们将介绍在嵌入式Linux系统上移植AP模块的驱动。1.USB无线网卡的识别向嵌入式Linux设备的USB口插入360随身WIFI。查看命令【lsusb】,结果如下:2.源码移植该源码下载路径:ht...
2019-06-05 18:07:06
1129
原创 嵌入式Liunx移植USB随身WIFI(STA模式)
在开发嵌入式Linux设备的时候,设备连接外网一般通过有线或无线的模式。有线简单只要连接网线并正确设备相关参数即可。如何让嵌入式Linux设备像手机一样连接WIFI进行上网呢?这需要Linux设备具有USB外设接口,无线网卡等。本篇将介绍在ARM-Linux平台下移植MT7601U的无线网卡驱动。1.USB无线网卡的识别由于一般的嵌入式Linux设备本身没有自带无线网卡,我们需要外部接入一个无...
2019-06-04 15:56:59
1466
1
原创 Linux文件系统
Linux以文件的形式对计算机中的数据和硬件资源进行管理,也就是彻底的一切皆文件,反映在Linux的文件类型上就是:普通文件、目录文件(也就是文件夹)、设备文件、链接文件、管道文件、套接字文件(数据通信的接口)等等。而这些种类繁多的文件被Linux使用目录树进行管理, 所谓的目录树就是以根目录(/)为主,向下呈现分支状的一种文件结构。不同于纯粹的ext2之类的文件系统,我把它称为文件体系,一切皆文...
2019-05-31 11:41:11
153
原创 嵌入式Linux中断驱动
用过STM32的大概都知道,基本每个GPIO管脚都支持中断模式,这样在检测外部插入一个硬件设备时,通过GPIO管脚电平中断就非常方便。那么AM3354的片子是否支持GPIO管脚电平中断呢?答案是肯定的,下面直接上源码解析:#include <linux/init.h>#include <linux/module.h>#include <linux/kernel....
2019-05-29 18:41:07
1316
原创 嵌入式Linux的GPIO中断
做个STM32开发的都知道,通过程序配置让普通的GPIO口具有中断功能。这样对于设备检测某些硬件的自动设备要方便的多。那么在嵌入式的Linux是否具有这样的功能呢?答案是肯定的,下面我们就来介绍一下如何配置嵌入式Linux的GPIO中断。目前正好有一个项目,其硬件上有一个按钮对应GPIO的73管脚,下面我们就以这个管脚为例来讲述如何去设置管脚的中断,直接上源码,如下:#include <...
2019-05-29 15:13:06
7731
原创 Linux设备驱动
1.设备驱动的介绍u-boot的任务是启动内核,内核的任务是启动应用程序,应用程序会涉及很多文件和硬件操作,但不会直接操作硬件,由设备驱动来完成硬件的具体操作;比如读写文件,点灯、获取按键值。Linux的设备驱动可分为以下3大类:字符设备指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后顺序。字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制...
2019-05-28 15:11:14
217
原创 Linux基础知识杂记
本博文会不定时更新,主要记录在Linux开发过程中的一些细小知识点,以后后续查阅。1.操作管脚电平在Linux下,关于管脚的配置存在系统的 【/sys/class/gpio】目录下。其目录结构如下:--w------- 1 root root 4096 Jan 1 00:00 exportlrwxrwxrwx 1 root root ...
2019-05-27 18:08:56
180
原创 Linux下的GDB代码调试
在日常代码的调试中,经常遇到段错误(segfault),调试非常费劲,除了单元测试和基本测试外,有些时候是在在线环境下,没有基本开发和测试工具,这就需要调试的技能。今天就来介绍一下利用core dump文件和gdb做应用程序调试和追踪的方法。1. core dump 文件在linux下当应用程序发生异常中止退出或者发生崩溃的时候,linux内核会将应用程序在这段运行期间的内存状态等相关信息转存...
2019-05-24 14:01:23
363
原创 Linux网络分析
Linux中网络配置相当重要,作为技术开发人员,需要数量掌握网络信息的设置和查看。1.ifconfigifconfig命令被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件【/etc/network/interfaces】了。其相关命令如下:查询网络信息...
2019-05-23 17:26:50
643
原创 Linux的线程锁
1.互斥锁在线程实际运行过程中,我们经常需要多个线程保持同步。这时可以用互斥锁来完成任务。1.1锁的创建互斥锁可以动态或静态的被创建,可以用宏PTHREAD_MUTEX_INITIALIZER来静态的初始化锁,采用这种方式比较容易理解,互斥锁是pthread_mutex_t的结构体,而这个宏是一个结构常量,如下可以完成静态的初始化锁:pthread_mutex_t mutex =PTHRE...
2019-05-23 15:12:19
6103
1
原创 Linux进程通讯之信号量
简单来讲,信号量是一个用来描述临界资源的资源个数的计数器。信号量的本质是一种数据操作锁,它本身不具有数据交换的功能,而是通过控制其他的通信资源(文件、外部设备等)来实现进程间通信,他本身更只是一种外部资源的标识。信号量在此过程中负责数据操作的同步、互斥等功能。当请求 一个使用信号量来表示 的资源时,进程需要先读取信号量的值来判断资源是否可用。大于0,资源可以请求;等于0,无资源可用,进程会进入睡...
2019-05-22 16:28:50
221
原创 Linux多进程通讯之消息队列
消息队列,Unix的通信机制之一,可以理解为是一个存放消息(数据)容器。将消息写入消息队列,然后再从消息队列中取消息,一般来说是先进先出的顺序。可以解决两个进程的读写速度不同(处理数据速度不同),系统耦合等问题,而且消息队列里的消息哪怕进程崩溃了也不会消失。在系统中可以运行 ipcs -q 的命令查询消息队列。1.键值生成每一个消息队列都有一个对应的键值(key)相关联,如同共享内存和信号量一...
2019-05-22 11:09:45
1240
原创 Linux多进程通讯之内存共享
共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝。它是IPC对象的一种。为了在多个进程间交换信息,内核专门留出了一块内存区,可以由需要访问的进程将其映射到自己的私有地址空间。进程就可以直接读写这一内存区而不需要进行数据的拷贝,从而大大提高的效率。共享内存允许两个进程访问同一块内存区域,它们使用同一个 key 值标记。1.1共享内存的创建函数原型如下:int...
2019-05-21 17:53:52
1255
原创 Linux的多进程通讯之管道
Linux下开发经常有多个进程协调工作,由于进程间的空间是相互独立的,怎么去完成进程间的通信呢?在Linux系统中提供了管道、信号量、消息队列、互斥信号、共享内存等通讯方法。后面将一一解析。管道管道是Linux由Unix那里继承过来的进程间的通信机制,它是Unix早期的一个重要通信机制。其思想是,在内存中创建一个共享文件,从而使通信双方利用这个共享文件来传递信息。由于这种方式具有单向传递数据的...
2019-05-21 16:23:26
615
原创 Linux下精确计时
1.低精度计时**1.1sleep 和 usleep **sleep(int x) 系统调用,让进程等待x秒钟。其精度以秒为单位的。usleep( int x)系统调用,让进程等待x 纳秒,但实际其精度一般是10ms,再低的达不到。这两个函数的优点是简单,缺点进程被阻塞。1.2alarm闹钟alarm也称为闹钟函数,它可以在进程中设置一个定时器,当定时器指定的时间到时,它向进程发送SI...
2019-05-21 13:59:12
3998
原创 实时操作系统与分时操作系统
1. 什么是实时操作系统?实时操作系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的操作系统。其特点是及时响应和高可靠性。实时系统又分为硬实时系统和软实时系统,硬实时系统要求在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则只要按照任务的优先级,尽可能...
2019-05-20 17:34:03
2239
原创 Linux的多进程与多线程
Linux 是多任务操作系统,可以同时运行多个进程,来完成多项工作。在Linux编程中,为了满足项目高并发的性能需求,采用多进程和多线程进行编程,下面将具体介绍Linux下的多进程与多线程编程。1.多进程进程就是处于活动状态的程序,占用一定的内存空间。进程可以把自己复制一份,从而创造出一个新的进程。新的进程称为 子进程,原来的进程称为 父进程。进程可以复制自己。这意味着启动一个程序,可能会产...
2019-05-20 17:08:28
533
原创 TCP/IP及Socket网络通讯
1.TCP/IPTCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、物理链路等正确无误,为数据的传输开辟通道。其在网络的七层协议中所处的位置如下图:1.1TCP数据...
2019-05-20 14:54:45
498
原创 C语言之可变参数
主函数在调用函数时,会进行传参,当实参的数量发生变化但被调用函数的功能没有发生改变,这时候被调用函数的参数数量也要发生改变。C语言中有一个比较有意思的实现------可变参数列表。可变参数列表,通过将函数实现为可变参数的形式,可以使得函数可以接受1个以上的任意多个参数(不固定)。eg:举个例子,编写一个函数可以实现任意个参数的平均数,代码如下:#include <stdio.h>...
2019-05-20 10:42:08
257
翻译 EOS白皮书(中文)
关于EOS的信息介绍官网 http://block.one/ | https://eos.io/开源 https://www.github.com/eosio | 技术白皮书 | 存储白皮书EOS (Enterprise Operation System) 为商用分布式应用设计的一款区块链操作系统开发者友好的区块链底层平台类似与电邮系统的系统架构跨链消息传递机制独立的脚本语言免费...
2019-05-17 09:33:05
1389
1
原创 分片-化整为零,分而治之
目前的区块练技术面临着一个巨大的瓶颈,那就是:如何有效地提升区块的吞吐量(TPS)。区块链的扩展性一直是大多数公链发展过程中难以避开的一块拦路石,比特币因之有一段长达三年的扩容之争,以太坊一度因为一个小小的密码猫游戏而长时间拥堵不堪。目前提出的问题解决思路主要有以下几种:治标不治本的扩容(扩大区块容量)、牺牲部分去中心化的DPoS和pBFT共识机制、不同于区块链的DAG、链下扩容(子链和侧链),以...
2019-05-16 17:50:40
757
原创 EOS智能合约编译&部署
跟随大家学习编程语言一样,每次都会首先写一段代码,打印“hello,wrold”。通过对EOS的学习,今天将编译一个简单的hello智能合约部署到EOS私有链上。1.EOS智能合约简介之前学习过ETH,下面我将两者的智能合约进行简单的对比。ETHEOS编程语言solidity 语言开发,类似js语言C++编译工具solceosio-cpp部署方式h...
2019-05-15 17:46:35
1492
原创 EOS在ubuntu16.04搭建私有链(二)
上篇中讲到了私有链nodeos的启动和通过cleos管理wallet钱包。那么EOS怎么通过账户进行相互间的转账呢?EOS与ETH有很大的不同,在EOS中所有的功能都依靠智能合约。EOS主链仅仅是提供了一个平台,如果我们要激活私链,想在私链上完成转账等交易,就需要部署eos的基础合约。eos有几个比较重要的系统合约,是我们必须要部署的,记下来我们将介绍基础合约的部署和账户间转账等基本操作。1.激...
2019-05-13 16:08:41
785
原创 EOS在ubuntu16.04搭建私有链(一)
EOS,可以理解为Enterprise Operation System,即为商用分布式应用设计的一款区块链操作系统。EOS是引入的一种新的区块链架构,旨在实现分布式应用的性能扩展。想要全面的了解EOS,通过搭建eos私有链是不错的方法,下来接我将介绍在ubuntu16.04的环境下搭建eos私有链的过程。1.源码编译的心酸过程最初,通过网上博客git源码,然后通过官方提供的编译脚本进行整体自...
2019-05-11 17:54:18
1022
原创 Ubuntu下Truffle框架的搭建
Truffle是一个世界级的开发环境,测试框架,以太坊的资源管理通道,致力于让以太坊上的开发变得简单,Truffle有以下: 内置的智能合约编译,链接,部署和二进制文件的管理 快速开发下的自动合约测试 脚本化的,可扩展的部署与发布框架 部署到不管多少的公网或私网的网络环境管理功能 使用EthPM&NPM提供的包管理,使用ERC190标准 可配的构建流程,支持紧密集成 Tru...
2019-05-06 17:20:09
2458
2
原创 HTTPS超文本传输安全协议
1.什么是HTTPSHTTPS = HTTP+ SSLHTTPS是对HTTP的安全强化,在HTTP的基础上引入了加密和认证过程。通过加密和认证构建一条安全的传输通道。所以HTTPS 可以看成是:在安全通道内,对数据进行对称加密后传输。这样即使黑客打破了安全通道,还有一层数据加密。极大的保障了数据通信的安全性。2.HTTPS 的演化我们将从HTTP的不安全方面着手,通过三个场景的阐述,来说明...
2019-05-05 17:27:06
1080
原创 HTTP超文本传输协议详解
1.引言HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。HTTP协议的主要特点可概括如下:1.支持客户/服务器...
2019-05-05 16:02:52
4241
原创 零知识证明
零知识证明 zero-knowledge proofs,简写为 ZKPs,最初由 S.Goldwasser、S.Micali 及 C.Rackoff 在 1985 年的论文《互动证明系统的知识复杂性》提出,指的是证明者能够在不向验证者提供任何有用信息的情况下,使验证者相信某个论断是正确的。允许证明者 prover、验证者 verifier 证明某项提议的真实,却不必泄露除了「提议是真实的」之外的任...
2019-04-28 21:36:44
395
原创 目前主流的共识机制
区块链其实就是分布式账本,怎么让大家去相信这个分布式账本呢?所有大家需要约定一个共识机制,通过共识机制出来的账本大家都认为可靠可信的。目前在区块链中,主流的共识机制有Pow、Pos、DPos、PBFT、POI、POP等,接下来为大家一一介绍这些共识机制。Pow工作量证明工作量证明的本质就是谁做的工作多,谁就更有机会来获取额外的奖励。对于BTC和ETH,Pow就是不停的寻找一个随机数并计算哈希值...
2019-04-28 21:08:47
4280
原创 以太猫合约关系梳理(七)
这段时间分析以太猫的合约源码,其代码基本都是通过合约继承来实现后续的功能。对于各个合约间的关联,我画了一张图,仅供大家参考,如有表述不正确的地方烦请指出,谢谢。...
2019-04-28 16:08:39
297
原创 以太猫游戏主合约(六)
通过前述5篇博文的分析,分别介绍了以太猫的基础数据,权限控制,生产,拍卖,交易等相关合约代码分析,今天将介绍一下,以太猫游戏开始,宣传猫和一代猫的生成过程以及该休息的主合约。宣传猫&一代猫// 游戏刚开始时,有宣传猫和初代猫两种,宣传猫直接给账号,初代猫放大市场拍卖contract KittyMinting is KittyAuction { uint256 public c...
2019-04-28 14:27:35
316
原创 以太猫合约之拍卖(四)
由于以太猫合约遵循的是ERC721标准的合约协议,所以每只猫的价值都不一样。在以太猫的游戏中,每只猫的价值是通过拍卖来体现的。在日常生活中,拍卖都是从从低价到最高价拍卖的,而在以太猫的游戏 合约中,拍卖限定了最高价、最低价和拍卖时间,竞拍者是从高价到低价进行竞拍的,这样节约了由于大量低价竞拍最后没有成交造成gas浪费和网络堵塞。接下来就重点来分析相关代码。拍卖合约(基础接口)// 拍卖合约,包...
2019-04-28 11:37:43
382
原创 以太猫合约之生产(三)
在以太猫游戏中,以太猫除了宣传的5000只猫和第一代45000只猫,后续代猫的产生,需要猫进行交配,怀孕,生产来生成更多的猫。接下来就来分析这部分的合约代码。猫的交配、怀孕、生产合约contract KittyBreeding is KittyOwnership { // 当猫怀孕时,触发事件 event Pregnant(address owner, uint256 matr...
2019-04-28 10:31:03
503
原创 以太猫合约之数据合约分析(二)
上一篇讲解以太猫的一些基础合约,包含权限控制和ERC721函数定义合约。本篇将重点介绍以太猫的基础数据合约和ERC721代币实现合约。我们先看以太猫基础数据合约。以太猫基础数据合约contract KittyBase is KittyAccessControl { // 事件 event Birth(address owner, uint256 kittyId, uint256...
2019-04-26 18:36:29
431
原创 以太猫合约之基础合约分析(一)
通过https://etherscan.io/查看部署在以太坊主链上的ERC721合约,排在第一位是代币名为CryptoKitties (CK)的合约,其合约地址为:0x06012c8cf97bead5deae237070f9587f8e7a266d。经查询它就是大名鼎鼎的以太猫游戏的合约地址,接下来我们就来撸撸以太猫的源码。...
2019-04-26 17:45:40
762
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人