自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一口Linux的专栏

专注linux知识的分享

  • 博客(34)
  • 资源 (10)
  • 收藏
  • 关注

原创 呕心沥血整理的的嵌入式学习路线

曾经是某见的教学总监,我带出来的学生也有大几千了,基本都从事linux相关工作。网上看了很多的嵌入式学习路线,有的还凑活,有的纯粹是打广告卖板子,有的东拼西凑,简直是嵌入式劝退指南。大致给你梳理一下我从事的一个嵌入式的课程培训体系吧。基础1. linux基本操作:个人建议只要会一些基本的操作就行了,不需要太深入的学习每一个命令,用到的时候会去搜索就行了。需要掌握的知识如下:环境的搭建;Linux目录结构;文件类型;基本目录操作,文件操作,vim,ifconfig,ping,cd,cp,m

2020-09-10 19:39:53 29939 16

原创 手把手教Linux驱动9-等待队列waitq

在上一篇《手把手教Linux驱动8-Linux IO模型》我们已经了解了阻塞、非阻塞、同步和异步等相关概念,本文主要讲解如何通过等待队列实现对进程的阻塞。应用场景:当进程要获取某些资源(例如从网卡读取数据)的时候,但资源并没有准备好(例如网卡还没接收到数据),这时候内核必须切换到其他进程运行,直到资源准备好再唤醒进程。 waitqueue (等待队列)就是内核用于管理等待资源的进程,当某个进程获取的资源没有准备好的时候,可以通过调用 add_wa...

2020-09-28 11:38:57 933

原创 手把手教Linux驱动8-Linux IO模型

更多Linux驱动知识,请关注 一口Linux对于一个应用程序即一个操作系统进程来说,它既有内核空间(与其他进程共享),也有用户空间(进程私有),它们都是处于虚拟地址空间中。用户进程是无法访问内核空间的,它只能访问用户空间,通过用户空间去内核空间复制数据,然后进行处理。什么是IO?IO模型中,先讨论下什么是IO?在计算机系统中I/O就是输入(Input)和输出(Output)的意思,针对不同的操作对象,可以划分为磁盘I/O模型,网络I/O模型,内存映射I/O, Di...

2020-09-28 11:37:50 944

原创 C语言中的短路现象

短路现象1比如有以下表达式 a && b && c只有a为真(非0)才需要判断b的值;只有a和b都为真,才需要判断c的值。举例求最终a、b、c、d的值。main(){ int a,b,c,d; a = 0; b = 1; c = 2; d = a++ && b++ && --c; printf("a=%d b=%d c=%d d=%d\n",a,b,c,d);}因为a++是先判断a的值再自加,而a

2020-09-23 21:34:34 1056

原创 移植libjpeg库,Wrong JPEG library version: library is 90, caller expects 62

1.下载libjpeg库下载地址:http://www.ijg.org/files/2.解压yikou@ubuntu:/work/lib$ tar -zxvf jpegsrc.v9b.tar.gz 3.配置yikou@ubuntu:/work/lib$ cd jpeg-9b/./configure --host=arm-linux-gnueabihf --prefix=$PWD/temp_install4. 安装yikou@ubuntu:/work/lib/jpeg-9b$ make

2020-09-23 20:14:21 2046

原创 SQLite向arm板子的移植

SQLite向arm-linux的移植SQLite是一个开源的嵌入式关系数据库,我们用它来管理从M0端接收的数据,将检测到的仓库信息存储起来。SQLite环境的建立:首先从下载最新版本的sqlite源码包,我下载的是sqlite-amalgamation-3.7.3.tar.gz,并将下载的文件解压。 在解压生成的 sqlite-3.7.3 目录下执行./configure--host=arm-none-linux-gnueabi--prefix=/home/linux/project/sqli

2020-09-22 22:10:11 630

原创 嵌入式数据库sqlite3【进阶篇】-如何用C语言操作sqlite3,一文搞懂

sqlite3编程接口:主要包括2个结构体和5个函数,如下sqlite3 *pdb, 数据库句柄,跟文件句柄FILE很类似sqlite3_stmt *stmt, 这个相当于ODBC的Command对象,用于保存编译好的SQL语句sqlite3_open(), 打开数据库sqlite3_exec(), 执行非查询的sql语句sqlite3_prepare(), 准备sql语句,执行select语句或者要使用parameter bind时,用这个函数(封装了sqlite3_exec)Sqlite3_

2020-09-22 08:57:17 1339 2

原创 ubuntu中文设置

首要条件:虚拟机能上网第一步: 更改 更新管理器中的地址最好在以上步骤完成之后测试下网络是否OK!上面的服务器选择完成后,再在终端执行下面命令:等待完成。设置语言属性:打开语言支持后,会提示更新语言包,点击install安装到完成。如果以上操作ok,打开的文件内容为如下:将第一行改为zh_CN.UTF-8即可....

2020-09-22 08:14:26 354

原创 Linux开机自动启动某一程序

Linux开机启动程序详解我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍Linux开机引导的步骤。加载内核LILO启动之后,如果你选择了Linux作为准备引导的操作系统,第一个被加载的东西就是内核。请记住此时的计算机内存中还不存在任何操作系统,PC(因为它们天然的设计缺陷)也还没有办法存取机器上全部的内存。因此,内核就必须完整地加载到可用RAM的第一个兆字节之内。为了实现这个目的,内核是被压缩了的。这个

2020-09-21 19:59:49 1137

原创 Linux命令:利用cat awk sed 获得网口的名字

命令:cat /proc/net/dev | awk '{i++; if(i>2){print $1}}' | sed 's/^[\t]*//g' | sed 's/[:]*$//g'测试输出:loeth0解释:(1) /proc/net/dev是给用户读取或更改网络适配器及统计信息的方法;(2) awk '{i++; if(i>2){print $1}}'命令是从第二行开始循环获取第一列数据;(3) sed 's/^[\t]*//g'命令为去除行首的空格;(4) s

2020-09-21 15:33:07 674

原创 hostapd基本配置

最近在公司做一些路由器功能的实现。板子是现成的,在其之上跑一个Linux操作系统,我的主要任务就是利用一些工具让板子的路由和无线接入功能运作起来。其中在做无线接入的功能使用hostapd来实现。hostapd是一个带加密功能的无线接入点程序,是Linux操作系统上构件无线接入点的一个比较方便的工具,支持IEEE 802.11协议和IEEE 802.1X/WPA/WPA2/EAP/RADIUS加密。hostapd的官方介绍请看这里,具体的配置方法和含义在这里有比较详尽的介绍。首先需要从官网上获得hostap

2020-09-21 14:08:12 2713 2

原创 深刻理解 Linux 配置文件

介绍每个 Linux 程序都是一个可执行文件,它含有操作码列表,CPU 将执行这些操作码来完成特定的操作。例如,ls 命令是由 /bin/ls 文件提供的,该文件含有机器指令的列表,在屏幕上显示当前目录中文件的列表时需要使用这些机器指令。 几乎每个程序的行为都可以通过修改其配置文件来按照您的偏好或需要去定制。Linux 中有没有一个标准的配置文件格式?一句话,没有。不熟悉 Linux 的用户(一定)会感到沮丧,因为每个配置文件看起来都象是一个要迎接的新挑战。在 Linux 中,每个程序员都可以自

2020-09-21 13:59:28 619

原创 18. SPI协议,spi转can,MCP2515裸机驱动详解

SPI概述Serial Peripheral interface 通用串行外围设备接口是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间。SPI特点采用主-从模式(Master-Slave) 的控制方式SPI 规定了两个 SPI 设备之间通信必须由主设备

2020-09-21 09:44:03 6590 4

原创 Linux I2C内核架构分析,基于三星I2C控制

I2C内核架构分析本章以linux3.14.0为参考, 讨论Linux中的i2c控制器驱动是如何实现的。驱动入口三星的i2c控制器驱动是基于platform总线实现的,struct platform_driver定义如下:当设备树节点信息的compatible信息和注册的platform_driver.driver. of_match_table字符串会通过platform总线的macth方法进行配对,匹配成功后会调用probe函数s3c24xx_i2c_probe()。驱动核心结构要理解i2

2020-09-20 22:08:29 513 1

原创 Ubuntu Linux 安装 .7z 解压和压缩文件

安装方法:sudo apt-get install p7zip解压文件:7z x 100ask_imx6ull-sdk.7z -r -o /home/peng/xx解释如下:x 代表解压缩文件,并且是按原始目录解压(还有个参数 e 也是解压缩文件,但其会将所有文件都解压到根下,而不是自己原有的文件夹下)manager.7z 是压缩文件,这里大家要换成自己的。如果不在当前目录下要带上完整的目录-r 表示递归所有的子文件夹-o 是指定解压到的目录,这里大家要注意-o后是没有空格的直接接目录

2020-09-19 13:53:38 682

原创 ubuntu18设置不要进入休眠,省去输入密码的麻烦

Ctrl – Alt – T 组合键打开终端;然后修改配置文件/etc/systemd/logind.confvim /etc/systemd/logind.conf打开文件后修改下面这行:#HandleLidSwitch=suspend改成这样:HandleLidSwitch=ignore保存文件,重启 Login Manager 服务:sudo restart systemd-logindUbuntu系统不睡眠设置完成,配置文件的 “ignore” 值告诉 Ubuntu 当笔记本合上后不

2020-09-18 13:52:59 3027

原创 嵌入式数据库sqlite3【进阶篇】-子句和函数的使用,小白一文入门

在《嵌入式数据库sqlite3命令操作基础篇-增删改查,小白一文入门》一文中交了大家如何掌握sqlite3的基本操作增删改查,本文介绍一些其他的操作。数据库准备新建数据库,company.db。设计一个表格employee,内容如下:idnamedepsalary1马云market60002马化腾tech70003李彦宏trs86004张朝阳trs60005罗永浩tech89006王欣market4000

2020-09-18 08:08:59 1674

原创 17.基于Cortex-A9,i2c 外设详解

本文基于三星Cortex-A9架构,Exynos4412讲解I2C原理、以及基于I2C的mpu6050陀螺仪的数据读取实例(包括在裸机模式下数据的读取以及基于Linux驱动的读取)。还会分析Linux内核I2C架构,篇幅过长,绝对干货。裸机篇本篇首先详细讲解I2C时序,然后讲解如何基于三星I2C控制实现裸机读取从设备信息方法。前言I2C(Inter-Integrated Circuit)总线(也称 IIC 或 I2C) 是有PHILIPS公司开发的两线式串行总线,用于连接微控制器及外围设备,是微电子

2020-09-17 19:22:32 1145

原创 mpu6050设备树如何填写,cortex-A9架构

设备树硬件电路图如下:由上图所示硬件使用的是I2C通道5,2. 查找exnos4412的datasheet 29.6.1节,对应的基地址为0x138B0000。3. 由上图可知中断引脚复用的是GPX3_3。4. mpu6050从设备地址为0x68。根据图1 可知 AD0接地的 值为 0参考mpu6050的datasheet,如下:可知从设备地址为0x68;linux内核中三星已经为I2C控制器和设备节点的编写提供了说明手册:\Documentation\devicetree

2020-09-17 19:16:16 590

原创 vim右键不能粘贴的解决办法

今天安装好ubuntu 18.06后,把之前做好的vim脚本拷贝到根目录下【注意】我是操作的管理员,所以修改信息在/root下如果是普通用户,就在对应的 /home/user 目录下操作即可。使用vim insert的时候发现右键不能粘贴,于是百度找到如下方法解决。vim .vimrc设置成下面 mouse-=a 即可如果没有该信息那么手动输入以下信息:if has('mouse') set mouse-=aendif...

2020-09-17 14:32:22 4453 1

原创 嵌入式数据库sqlite3【基础篇】-基本命令操作,小白一看就懂

安装sudo apt-get install sqlite sqlite3 安装应用程序sudo apt-get install libsqlite3-dev 安装库+头文件,用代码操作数据库必须安装sudo apt-get install sqlitebrowser 图形化工具建立数据库数据类型数据类型定义数据类型 NULL表示该值为NULL值。INTEGER无符号整型值。REAL浮点值。TEXT文本字符串,存储使用的编码方式

2020-09-17 08:17:28 901

原创 移植hostapd,遇到 version GLIBC_2.25 not found (required by hostapd)

原因描述在zynq上移植无线网卡并设置其为无限AP已经移植了,RT3070驱动Libnl libnl-1.1.tar.gzOpenssl openssl-1.1.1.tar.gzhostapd-2.6.tar.gz但是执行的时候遇到以下错误version GLIBC_2.25 not found (required by hostapd)网上搜了一下,是因为办理的/lib 库中libc.so.6这个库版本不对所以我对比了开发板中和交叉编译工具的这两个库文件:我的库

2020-09-16 20:34:15 1707 1

原创 从0实现基于Linux socket聊天室-实现聊天室的公聊、私聊功能-4

上文中,我们基于多线程的框架,实现了注册和登录的功能,这一章,我们在此基础上来实现公聊、私聊、显示在线用户列表功能。客户A:yikoulinux客户B:yikoupeng运行截图公聊客户B发公聊客户A收到信息:服务器log:私聊客户B私发信息给A:客户A收到的消息:显示在线用户信息...

2020-09-16 08:30:29 2410 1

原创 C语言操作时间函数time.ctime,实现定时执行某个任务小例子

时间操作函数在实际项目开发中会经常用到,最近做项目也正好用到就正好顺便整理一下。常用时间函数及举例1、time函数头文件:time.h函数定义:time_t time (time_t *t)说明: 返回从1970年1月1日的UTC时间从0时0分0妙算起到现在所经过的秒数。举例如下:#include<stdio.h>#include<time.h>int main(){ time_t timep; long seconds = time(&time

2020-09-15 22:06:32 2139

原创 Linux命令cURL如何访问TFTP服务器

一、命令的安装sudo apt-get install curl二、cURL命令语法:curl [options] [URL...]三、命令举例:例如:在IP地址192.168.43.117上搭建TFTP服务器,现在我们要根目录的某个文件,命令如下:curl tftp://192.168.43.117/test.c -o test.c...

2020-09-15 21:28:15 2143

原创 与直男癌程序猿男友相处十招必杀技,尤其最后一招

都说程序猿人傻钱多情商低,难相处,现整理10个大招送给诸位程序猿家属,没有效果你找我。第一招 鼠标鼠标 == 程序猿的生命那极具质感的微动声,紧扣手型的曲线。点开了屏幕,也点开了心扉!他握着鼠标,也在握着你!第二招 键盘机械键盘对于程序猿来说无异于金蛇郎君的金蛇剑、洪七公的打狗棒!可以没有女朋友,但是绝对不能没有机械键盘.送他一个让他做梦都想抱着睡觉的机械键盘,让他每天在梦中抱着你。以后吵架不用再用“我不爱...

2020-09-15 11:13:56 756

原创 从0实现基于Linux socket聊天室-实现聊天室的登录、注册功能-3

上一篇我们已经讲了如何搭建一个多线程的服务器模型,可以支持多个客户端同时连接服务器,本篇我们来实现多个客户端,如何实现向服务器注册信息,并实现登录的功能。信令接着上一篇的实例代码继续增加功能。要实现注册和登录功能,那么我们就必须要让服务器和客户端在交互数据包的时候按照统一的格式收发信令,现在我们定义交互信令格式:注册的客户端信息需要存储在服务器,为了简单起见,我们暂时不用数据库存储,只定义一个全局的数组保存客户端信息,并且规定只允许20个客户端登录。功能流程图现在我们根据功能,首先画一个流程图。

2020-09-14 10:01:05 5269 19

原创 从0实现基于Linux socket聊天室-多线程服务器一个很隐晦的错误-2

根据 《0 基于socket和pthread实现多线程服务器模型》所述,server创建子线程的时候用的是以下代码: pconnsocke = (int *) malloc(sizeof(int)); *pconnsocke = new_fd; ret = pthread_create(&tid, NULL, rec_func, (void *) pconnsocke); if (ret < 0) { perror("pthread_create err");

2020-09-11 08:19:45 1024

原创 从0实现基于Linux socket聊天室-多线程服务器模型-1

前言Socket在实际系统程序开发张中,应用非常广泛,也非常重要。实际应用中服务器经常需要支持多个客户端连接,实现高并发服务器模型显得尤为重要。常见的并发服务器模型select1 一个误区很多人认为它最大可以监听1024个,实际上却是文件描述符的值不能大于等于1024,所以除掉标准输入、输出、错误输出,一定少于1024个,如果在之前还打开了其他文件,那会更少2 select返回后,一般要轮询fd_set,发现新连接要加上,连接断开要去掉,这个过程一定要这样做:select之前把fd_set临时拷贝

2020-09-10 09:50:29 2259 4

原创 Linux信号量(1)-SYSTEM V

​信号量概念信号量本质上是一个计数器(不设置全局变量是因为进程间是相互独立的,而这不一定能看到,看到也不能保证++引用计数为原子操作),用于多进程对共享数据对象的读取,它和管道有所不同,它不以传送数据为主要目的,它主要是用来保护共享资源(信号量也属于临界资源),使得资源在一个时刻只有一个进程独享。信号量分类因为各种原因,Linux下有多种信号量实现机制,可以分别应用于不同的场合,分类如下:用户信号量主要运行于用户态,比如进程间都要访问某个文件,那么只有获得信号量的进程才能打开文件,其他进程会进入

2020-09-08 08:54:17 706

原创 手把手教Linux驱动7-内核互斥锁

互斥体概述信号量是在并行处理环境中对多个处理器访问某个公共资源进行保护的机制,mutex用于互斥操作。信号量的count初始化为1,down()/up()也可以实现类似mutex的作用。那为什么还要单独实现mutex机制呢?mutex的语义相对于信号量要简单轻便一些,在锁争用激烈的测试场景下,mutex比信号量执行速度更快,可扩展性更好,另外mutex数据结构的定义比信号量小。mutex的优点mutex和信号量相比要高效的多:mutex最先实现自旋等待机制mutex在睡眠之前尝试获取锁m

2020-09-04 09:53:18 637

原创 第一次发C语言文章居然在头条获得35的展现

前言昨天写了一篇《看了这几个C语言例子,你一定会连续说5个卧槽,声音一次比一次大》,一不小心小火了一把,废话不说,上数据统计信息:对于其他大V来说,这点阅读量算不上什么,但这篇文章属于计算机软件题材,尤其又是最冷门的C语言,而且一口君是8月8号才开始开通公众号,9月1号才注册的头条号:这篇文章也打破了一口君原创文章浏览量的记录,截止本文编写时间是524,一口君对这个数据还是很满意的。文章中提到的代码是IOCCC 【(The International Obfuscated C Code Cont

2020-09-03 09:22:09 964

原创 看了这几个C语言例子,你一定和我一样连说5个卧槽,声音一次比一次大

曾经我一直以为自己C语言学的还挺好的,直到看到这几个例子。例一#include <stdio.h>main(int t,int _,char* a){ return !0<t?t<3?main(-79,-13,a+main(-87,1-_, main(-86,0,a+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13? main(2,_+1,"%s %d %d\n"):9:

2020-09-02 08:23:23 1089

原创 Linux内核 自旋锁spin lock,教你如何用自旋锁让ubuntu死锁

背景由于在多处理器环境中某些资源的有限性,有时需要互斥访问(mutual exclusion),这时候就需要引入锁的概念,只有获取了锁的任务才能够对资源进行访问,由于多线程的核心是CPU的时间分片,所以同一时刻只能有一个任务获取到锁。内核当发生访问资源冲突的时候,通常有两种处理方式:一个是原地等待一个是挂起当前进程,调度其他进程执行(睡眠)自旋锁Spinlock 是内核中提供的一种比较常见的锁机制,自旋锁是“原地等待”的方式解决资源冲突的。即,一个线程获取了一个自旋锁后,另外一个线程期望获

2020-09-01 08:05:48 871 1

S3C2440全套中文手册.PDF

S3C2440A32位CMOS RISC微控制器用户手册 引言此用户手册描述的是三星公司的16/32位精简指令集(RISC)微处理器S3C2440A。三星公司的S3C2440A为手持设备和普通应用提供了低功耗和高性能的小型芯片微控制器的解决方案。为了降低整体系统成本,S3C2440A还提供了以下丰富的内部设备。S3C2440A基于ARM920T核心,0.13μm的CMOS标准宏单元和存储器单元。低功耗,简单,精致,且全静态设计特别适合于对成本和功率敏感型的应用。它采用了新的总线架构如先进微控制总线构架(AMBA)。S3C2440A 的突出特点是其处理器核心,是一个由Advanced RISC

2020-10-24

mdk414.rar

作者讲解ARM课程专用的IDE软件 mdk414.rar 学习ARM指令用的IDE环境 AREA Example,CODE,READONLY ;声明代码段Example ENTRY ;程序入口 Start ; 程序中的标号,本质上是内存单元(的地址)的别名 MOV R0,#0 ;设置实参,将传递给子程序的实参存放在r0和r1内 MOV R1,#10 BL ADD_SUM ;调用子程序ADD_SUM B OVER

2020-10-23

imx6ull arm板子支持lcd显示图片

lcd_show_jpeg.c test.c lcd.c HZK16 libjpeg.a jpegsrc.v6b.tar.gz

2020-10-04

移植无线AP,使无线网卡变成AP

移植之后就可以实现将无线网卡变成一个无线AP, 素有的压缩包,都已经汇总了,并验证过 dnsmasq-2.81.tar.xz hostapd-2.0.tar.gz iwlist.zip libnl-1.1.4.tar openssl-OpenSSL_1_0_0s.tar.gz

2020-09-18

MPU6050-英文原版数据手册.pdf

MPU6050-英文原版数据手册, CONTENTS 1 REVISION HISTORY ...................................................................................................................................5 2 PURPOSE AND SCOPE .....................................................................................................

2020-08-23

公众号一口Linux驱动部分源码汇总.rar

代码是公众号一口Linux 文章驱动部分所有势力代码,文章如下: 《玩转内核链表list_head,如何管理不同类型节点的实现(万字文)可以收藏》 《I2C干货-基于Cortex-A9(重新整理)》 《一文搞懂ADC裸机和基于Linux驱动编写方法》 《手把手教Linux驱动4-进程、文件描述符、file、inode关系详解》 《 手把手教Linux驱动3-之字符设备架构详解,有这篇就够了 》 《手把手教Linux驱动2-模块参数param和符号导出export用法》 《手把手教Linux驱动1-模块化编程》

2020-08-23

linux局域网多线程聊天室

linux c语言 聊天室 多线程 pthread

2013-10-09

ZIGBEE配置与组网

ZIGBEE配置与组网,如何搭建一个zigbee网络!

2013-05-02

zigbee网络建立过程

星形网络和树型网络可以看成是网状网络的一个特殊子集,所以接下来分析如何组建一个Zigbee网状网络。组建一个完整的Zigbee网络分为两步:第一步是协调器初始化一个网络;第二步是路由器或终端加入网络。加入网络又有两种方法,一种是子设备通过使用MAC层的连接进程加入网络,另一种是子设备通过与一个先前指定的父设备直接加入网络。

2013-05-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除