- 博客(16)
- 资源 (10)
- 收藏
- 关注
原创 12. 如何实现基于Cortex-A9 的UART裸机驱动并实现printf函数
前言通讯问题,和交通问题一样,也有高速、低速、拥堵、中断等等各种情况。如果把串口通讯比做交通,UART比作车站,那么一帧的数据就好比汽车。汽车跑在路上,要遵守交通规则。如果是市内,一般限速30、40,而高速公路则可以到120。而汽车走什么路,限速多少,就要看协议怎么规定了。常见的串口协议有RS-232、RS-422、RS-485等,他们之间有何细微差别?下面我们就一起来探讨一下。UART是什么UART是通用异步收发传输器(Universal Asynchronous Receiver/Transmi
2020-08-31 08:21:54 1115
原创 手把手教Linux驱动6-原子操作原理分析
原子操作原理分析概念原子操作是指不被打断的操作,即它是最小的执行单位。最简单的原子操作就是一条条的汇编指令(不包括一些伪指令,伪指令会被汇编器解释成多条汇编指令)。在 linux 中原子操作对应的数据结构为 atomic_t,定义如下:typedef struct { int counter;} atomic_t;本质上就是一个整型变量,之所以定义这么一个数据类型,是为了让原子操作函数只接受 atomic_t 类型的操作数,如果传入的不是 atomic_t 类型数据,在程序编译阶段就不会通过;
2020-08-28 13:58:16 735
原创 22张图详解浏览器请求数据包如何到达web服务器(搞懂网络可以毕业了)
浏览器的请求数据包如何到达web服务器?很多读者对于其中的完整流程不是特别的了解,下面一口君通过这22张图,详细的讲解我们点击浏览器的网址之后,数据包是如何经过重重险阻到达web server的。LAN网络中的用户要访问位于远程网络中的服务器存储的网页。用户首先激活网页上的链接。如果该域名对应的IP地址本地已经缓存,就直接访问该地址的80端口或者8080端口;如果没有缓存,那么浏览器会发出DNS请求给DNS服务器,获得该域名对应的IP地址。获得地址后,浏览器会通过socket首先向服务器发送三次
2020-08-28 13:17:02 969
转载 一篇文章了解什么是串口,UART、RS-232、RS-422、RS-485
通讯问题,和交通问题一样,也有高速、低速、拥堵、中断等等各种情况。如果把串口通讯比做交通,UART比作车站,那么一帧的数据就好比汽车。汽车跑在路上,要遵守交通规则。如果是市内,一般限速30、40,而高速公路则可以到120。而汽车走什么路,限速多少,就要看协议怎么规定了。常见的串口协议有RS-232、RS-422、RS-485等,他们之间有何细微差别?下面我们就一起来探讨一下。一、UART是什么UART是通用异步收发传输器(Universal Asynchronous Receiver/Transmit
2020-08-28 09:36:43 3295
原创 Linux scp命令
概念scp是secure copy的简写, 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。因为scp传输是加密的,可能会稍微影响一下速度。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致硬盘I/O非常高,而scp基本不影响系统正常使用。语法scp [-1246BCpqrv] [-c cipher]
2020-08-27 17:45:47 817
原创 Ubuntu18.04搭建ssh服务器
Ubuntu安装后默认只有ssh客户端,即只能在Ubuntu内去连接其他ssh服务器,若想实现我们的Ubuntu被其他主机远程连接,则需要自己去安装ssh服务端。安装进入Ubuntu18.04,打开终端,su进入root,输入命令:sudo apt install openssh-server执行结果:重启ssh服务器命令:/etc/init.d/ssh restartservice sshd restart修改配置文件vim /etc/ssh/sshd_config连接测
2020-08-27 15:36:09 807
原创 Linux命令cURL如何访问FTP服务器
前言cURL 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。cURL 的原作者是 Daniel Stenberg (目前是 cURL 的核心开发者),同时也是 IETF HTTPbis 工作组的资深成员。Daniel 在 1998 年创建了 curl 项目,他编写了最初的 curl 版本,并创建了 libcurl 库。到目前为止,代码仓库包括的 24000 次 commit 有超过一半是 Daniel 本人提交的,他依然是项目的核心开发者。Dan
2020-08-27 09:41:03 7227
原创 使用Linux命令cURL实现文件定时上传到ftp服务器的程序
前言有个同学私信问我,想实现某个文件定时上传到服务器要怎么来实现。我突然想到在之前公司为高通的iot模组编写FOTA功能时使用的一个超级强大的工具curl。心血来潮,决定专门写一篇文章,送给需要的朋友。文章分两部分,首先介绍curl的用法,然后实现一个定时上传日志文件的一个简单的程序。概念curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面
2020-08-27 08:16:40 2209 1
原创 手把手教Linux驱动4-进程、文件描述符、file、inode关系详解
本文目标什么是文件描述符?进程打开文件相关信息管理Linux设备文件三大结构:inode,file,file_operationsmknod 做了什么事?进程打开设备文件驱动如何支持同类型设备?如何获得注册的设备结构体私有地址?什么是文件描述符?Linux 中一切都可以看作文件,包括普通文件、链接文件、Socket 以及设备驱动等,对其进行相关操作时,都可能会创建对应的文件描述符。文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,用于指代被打开的
2020-08-25 14:01:47 1585
原创 手把手教Linux驱动5-自旋锁、信号量、互斥体概述
在Linux系统中有大量的临界资源需要保护,如何让各个任务有条不紊的访问这些资源,这涉及到Linux中并发访问的保护机制设计相关知识。 后面会详细介绍这几个机制。(据可靠消息,锁的实现经常出现在笔试环节。既可以考察面试者对锁的原理的理解,又可以考察面试者编程技能)。注:部分代码都是根据ARM64架构汇编代码翻译成C语言并经过精简(例如:spin lock、read-write lock)。也有部分代码实现是为了呈现背后设计的原理自己编写的,而不是精简Linux中实现的代码(例如mutex)。自旋锁(s
2020-08-25 12:11:51 854 1
原创 内核窥探|在kernel中的链表,其他的链表真的弱爆了
在Linux内核中,提供了一个用来创建双向循环链表的结构 list_head。虽然linux内核是用C语言写的,但是list_head的引入,使得内核数据结构也可以拥有面向对象的特性,通过使用操作list_head 的通用接口很容易实现代码的重用,有点类似于C++的继承机制(希望有机会写篇文章研究一下C语言的面向对象机制)。首先找到list_head结构体定义,kernel/inclue/linux/types.h 如下:struct list_head { struct list_head *n
2020-08-24 21:20:07 950 3
原创 fs4412 I2C驱动基于Cortex-A9,mpu6050裸机程序,驱动,I2C架构,有这一篇够了
本文基于三星Cortex-A9架构,Exynos4412讲解I2C原理、以及基于I2C的mpu6050陀螺仪的数据读取实例(包括在裸机模式下数据的读取以及基于Linux驱动的读取)。还会分析Linux内核I2C架构,篇幅过长,绝对干货。裸机篇本篇首先详细讲解I2C时序,然后讲解如何基于三星I2C控制实现裸机读取从设备信息方法。前言I2C(Inter-Integrated Circuit)总线(也称 IIC 或 I2C) 是有PHILIPS公司开发的两线式串行总线,用于连接微控制器及外围设备,是微电子
2020-08-24 18:52:31 1552 5
原创 16.从0学arm,基于Cortex-A9 ADC裸机驱动详解
前言在嵌入式开发中,ADC应用比较频繁,本文主要讲解ADC的基本原理以及如何编写基于ARM的裸机程序和基于Linux的驱动程序。ARM架构:Cortex-A9Linux内核:3.14在讲述ADC之前,我们需要先了解什么是模拟信号和数字信号。模拟信号主要是与离散的数字信号相对的连续的信号。模拟信号分布于自然界的各个角落,如每天温度的变化,而数字信号是人为的抽象出来的在时间上不连续的信号。电学上的模拟信号是主要是指幅度和相位都连续的电信号,此信号可以被模拟电路进行各种运算,如放大,相加,相乘等。模
2020-08-23 09:04:00 3992 1
原创 手把手教Linux驱动3-之字符设备架构详解,有这篇就够了
一、Linux设备分类Linux系统为了管理方便,将设备分成三种基本类型:字符设备块设备网络设备字符设备:字符(char)设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性。字符设备驱动程序通常至少要实现open、close、read和write的系统调用。字符终端(/dev/console)和串口(/dev/ttyS0以及类似设备)就是两个字符设备,它们能很好的说明“流”这种抽象概念。字符设备可以通过文件节点来访问,比如/dev/tty1和/dev/lp
2020-08-22 18:39:39 2682 4
原创 手把手教Linux驱动2-之模块参数和符号导出
通过《手把手教Linux驱动1-模块化编程》的学习,我们已经掌握了如何向内核加载一个模块,现在我们学习模块之间如何传递参数。一、给模块传递参数当我们加载一个模块到Linux内核的时候,Linux内核允许向这个模块传递一些参数。这样设计的好处就是,让我们的模块操作起来更灵活,我们可以通过给它传递不同的参数来完成不同的功能。例如:我们写一个模块程序,来完成硬件中断的操作。在Linux操作系统中,每个中断都有一个中断号。如果我们在模块里面将中断号写死,那我们的模块只能响应特定的中断了。如果我们把中断号作为参数
2020-08-22 18:12:49 1084 3
原创 手把手教Linux驱动1-模块化编程
大家好,从本篇起,一口君将手把手教大家如何来学习Linux驱动,预计会有20篇关于驱动初级部分知识点。本专题会一直更新,有任何疑问,可以留言或者加我微信。##什么是模块化编程?Linux的开发者,遍布世界各地,他们相互之间觉大数估计都不认识。如果真的是对这些开发者进行统一管理,那是很难做到的。所以大牛们,在设计Linux内核的时候,融入了模块化的思想。也就是说,现在大家已经有一个现成的Linux操作系统了,所有的开发者写的代码对于这个Linux操作系统而言都是一个模块,开发者可以模块的形式将自己的代码添
2020-08-22 17:49:14 2016 4
S3C2440全套中文手册.PDF
2020-10-24
mdk414.rar
2020-10-23
移植无线AP,使无线网卡变成AP
2020-09-18
MPU6050-英文原版数据手册.pdf
2020-08-23
公众号一口Linux驱动部分源码汇总.rar
2020-08-23
zigbee网络建立过程
2013-05-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人