
嵌入式
文章平均质量分 67
香雨亭榭
高度决定视野,尺度把握人生... ...
展开
-
Mosquitto服务安装与使用---入门操作介绍
关于Mosquitto配置的资料网上还是有几篇的,但是看来看去,基本上都是基于Linux。基于Window的凤毛麟角,看上去貌似配置的东西相差不大,实操过程中真的烦透了,配置就是不成功,这次把自己实践过程中的东西记录一下,分享出来。一、概念梳理1、Mosquitto是一款实现了消息推送协议MQTT 3.1的开源消息代理软件,提供轻量级的、支持可订阅/可发布的消息推送模式,是设备与设备之间的短消息通信变得简单,广泛应用于低功耗传感器、手机(app消息推送是场景之一)、嵌入式电脑、微型控制器等移动设备。原创 2020-11-11 22:22:37 · 7957 阅读 · 0 评论 -
Linux UIO驱动实例介绍
接上一篇介绍UIO机制:https://blog.youkuaiyun.com/hpu11/article/details/109395820uio驱动详解为了用最简单的例子说明问题,我们在我们uio驱动的内核部分只映射了一块1024字节的逻辑内存。没有申请中断。这样加载上我们的驱动后,将会在/sys/class/uio/uio0/maps/map0中看到addr name offset size。他们分别是映射内存的起始地址, 映射内存的名字,起始地址的页内偏移,映射内存 的大小。 在uio驱动...原创 2020-10-31 17:56:36 · 2794 阅读 · 3 评论 -
Linux UIO机制--用户空间I / O操作方法
目录 前言关于UIOUIO 的工作原理:前言于许多类型的设备,创建Linux内核驱动程序是过分的。真正需要的只是某种方式来处理中断并提供对设备存储空间的访问。控制设备的逻辑不必一定要在内核之内,因为设备不需要利用内核提供的任何其他资源。这样的一种常见的设备类别是用于工业I / O卡的设备。为了解决这种情况,设计了用户空间I / O系统(UIO)。对于典型的工业I / O卡,只需要一个非常小的内核模块。驱动程序的主要部分将在用户空间中运行。这简化了开发并降低了内核模块中...原创 2020-10-30 23:49:37 · 3253 阅读 · 0 评论 -
Linux内核模块编程,多源码Makefile编写
https://mp.youkuaiyun.com/console/editor/html/107838044在学习内核模块编程的时候遇到了一些由于Makefile书写不正确导致的问题。一个.c源文件的Makefile按照网上的大部分资料介绍那样是没有问题的,多个源文件的内核模块编程时,就出现问题了。把过程和解决方法贴出来,供大家参考,一起学习。单文件.c的编程: 单文件.c编写内核模块是常用的内核模块编写方法,对一些比较简单的功能比较使用。 test.c//test.c#in...原创 2020-08-06 14:34:39 · 1667 阅读 · 1 评论 -
x86计算CPU频率示例
#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<stdint.h>...原创 2020-01-03 15:20:35 · 527 阅读 · 0 评论 -
linux 更新内核,安装内核树
https://www.cnblogs.com/williamjie/p/10723919.html原创 2019-12-19 14:23:42 · 370 阅读 · 0 评论 -
Linux字符驱动之主设备号与次设备号
一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的各设备。例如一个嵌入式系统,有两个LED指示灯,LED灯需要独立的打开或者关闭。那么,可以写一个LED灯的字符设备驱动程序,可以将其主设备号注册成5号设备,次设备号分别为1和2。这里,次设备号就分别表示两个LED灯。原创 2019-11-23 14:11:46 · 581 阅读 · 5 评论 -
Centos7搭建KVM虚拟化环境
SR-IOV 技术是一种基于硬件的虚拟化解决方案,可提高性能和可伸缩性。SR-IOV 标准允许在虚拟机之间高效共享 PCIe(Peripheral Component Interconnect Express,快速外设组件互连)设备,并且它是在硬件中实现的,可以获得能够与本机性能媲美的 I/O 性能。SR-IOV 规范定义了新的标准,根据该标准,创建的新设备可允许将虚拟机直接连接到 I/O 设备。原创 2019-11-21 14:48:06 · 4822 阅读 · 0 评论 -
移植gtk,这个配置有点早,可以了解一下他的工作流程
最近一直GTK,感觉好晕、整整耗了我近三天才勉强在网络资料和他人帮助情况下完成。 所以记录一下,不然我记性太差,很可能下班之前就忘了!以后也好有个参考。 *****************************************************************************************************************原创 2016-09-09 17:09:55 · 1898 阅读 · 0 评论 -
linux的dma驱动
硬件平台:TI的3530内核:linux-2.6.36功能:将fpga的数据从内存的一个地方复制到内存另一个地方初学dma感到很是吃力,编写的内核驱动代码仔细看了一个星期,才将dma的工作原理和程序流程给看明白工作原理:通过软件配置dma控制器的寄存器,让dma自己讲数据从外部读入到内存中,使得linux系统可以直接访问,而在这数据传送的期间,cpu不参与数据的传输,这也大大提高了原创 2016-08-29 21:19:24 · 1074 阅读 · 0 评论 -
linux内核的并发与竞态
并发与竞态是指多个任务单元同时访问同一个资源,就会出现并发,竞态的现象。其中多个任务单元包括中断,进程/线程,甚至多个多处理器;同一资源既包含硬件资源,也包括软件数据,比如:gpio,硬件设备... ...,软件包括全局变量等。并发与竞态在内核的设计和驱动的设计都是非常重要的一个模块,因为当多个任务单元同时访问同一资源时,势必会造成某个数据单元的数据的异步,也就是访问错误的数据,如果放问的原创 2016-08-30 19:35:27 · 1650 阅读 · 0 评论 -
交叉编译找不到stdio.h头文件,make menuconfig问题解决办法
今天测试交叉编译器总出现问题,fatal error : stdio.h No such file or directory,后来根据指导使用编译命令 :arm-linux-gcc src.c -I 头文件路径, 能编译通过,但是却arm-linux-ld 又通不过编译内核linux-2.6.36 在make menuconfig 出现错误 Install ncurce , 这是个终端中最简单原创 2016-08-31 19:51:50 · 9057 阅读 · 0 评论 -
原子上下文,进程上下文,中断上下文的详细解析
内核空间和用户空间是现代操作系统的两种工作模式,内核模块运行在内核空间,而用户态应用程序运行在用户空间。它们代表不同的级别,而对系统资源具有不同的访问权限。内核模块运行在最高级别(内核态),这个级下所有的操作都受系统信任,而应用程序运行在较低级别(用户态)。在这个级别,处理器控制着对硬件的直接访问以及对内存的非授权访问。内核态和用户态有自己的内存映射,即自己的地址空间。处理器总处于以下状态转载 2016-08-31 19:55:12 · 1497 阅读 · 0 评论 -
error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
这个错误多为编写linux驱动程序时出现的错误,正常情况下是以警告出现的,一般有两种情况:1. 在函数体内,定义变量代码前边出现非定义的变量(此变量在其他地方已经定义了),编译时就会出现这个错误或警告2. 在定义变量代码前边出现printk函数,编译时也会同样出现这个警告或错误主要就是:在编写linux驱动的时候在一个函数的前边首先把这个函数中所需的所有变量一并定义完,就不会出原创 2016-09-20 21:30:28 · 16082 阅读 · 0 评论 -
用户空间的虚拟地址如何转换得到实际的物理地址
思路:进程号是一个进程在用户空间的唯一标示,所以,根据pid可以从内核中得到一个进程的所有信息,另外就是知道虚拟地址就可以通过内核物理地址映射到虚拟地址的逆运算就可以还原他的实际物理地址以上便是虚拟地址转换成所对应的实际物理地址的思路。大致的代码编写流程:首先根据pid我们可以得到这个进程的task_struct,进而通过task_struct得到mm,通过mm得到pgd。原创 2016-09-20 21:47:03 · 8564 阅读 · 5 评论 -
server,gtk,tslib
一、首先先说下framebuffer、xserver、tslib、gtk和桌面这五者之间的联系, 1、framebuffer 即linux系统的一块内存区域,往这块区域写东西屏幕就会有所显示。对应的设备文件是dev/fb0 。2、xserver 一般所在目录叫X11,对应的可执行程序叫Xorg,是作为服务器,图形界面相当于客户端,上层图形程序运行时会先告诉 xserver,xser转载 2016-09-08 20:53:03 · 858 阅读 · 0 评论 -
修改启动logo,禁止光标
linux内核下使用的图片文件类型是pnm和PPm格式的,所以在开始介绍修改linux内核启动LOGO之前,1、先需要介绍一下怎么样设计自己开始logo的ppm图片,首先选择一张png格式的图片,使用如下命令确保你必须安装以下的工具(pngtopnm,pnmquant,pnmtoplainpnm)如果没有安装,你可以使用sudo get-aptinstall netpbm命令来安装,另外你原创 2016-09-08 21:19:43 · 483 阅读 · 0 评论 -
ubuntu系统下的minicom串口/usb转串口配置
1. 安装minicom串口软件sudo apt-get install minicom2. 配置串口minicom默认配置是tty8如果你直接使用的就是串口,那么安装好之后就可以直接使用了如果你是用usb转串口,那么需要配置以下 1)查看你的系统上是否有ttyUSB0这个文件 ls /dev/ttyUSB0 2)如果没有原创 2016-09-25 22:22:34 · 936 阅读 · 0 评论 -
Install ncurses (ncurses-devel) and try again.
主要就是终端图形配置时最容易出现的问题,比如最常见的make menuconfig,解决方法: # sudo apt-get install ncurses-devel 屏幕弹出:找不到这个软件,或者说这个这个软件废弃了之类的错误, 这时安装 libncurses5-dev (安装过程没有提示任何错误,安装成功原创 2016-09-26 22:41:06 · 6203 阅读 · 0 评论 -
ioremap/mmap的几个测试结论
环境:pc机,ubuntu 14.04 64位,物理机 arm板 omap3530 , 1G内存, 内核linux-2.6.321. mmap在pc机上测试映射大小,可以将文件映射大小4G,并且这4G可以使用数据全部覆盖,即映射的4G空间可以全部访问他的物理地址#include #include #include #include #includ原创 2016-09-27 22:31:27 · 3401 阅读 · 9 评论 -
fopen :invalid argument错误
今天使用文件操作函数:fopen fread fwrite fclose时,编译正常通过了,但是运行时就爆出了invalid argument错误FILE* fp = fopen ("a.txt", "bw"); // error : b只能书写在w的后边表示只能以二进制操作该文件if (NULL == fp) {perror ("fopen"); return -1;}执原创 2016-09-28 20:33:16 · 13106 阅读 · 0 评论 -
jiffies:内核中的时间观念
jiffies在内核中是一个全局变量,声明包含在#include 中,几个内核中常用的的概念:1. HZ内核常量,ARM架构HZ=100,X86架构HZ=1000例如HZ=100,表示硬件定时器1秒钟给CPU发送100个定时器中断信号每发生一次中断的时间间隔为10ms注意:不同的环境HZ的值都是可能不一样的,我曾经遇到过一个TI的开发板,他的jiffies比较特殊一点,原创 2016-09-28 21:13:14 · 5973 阅读 · 2 评论 -
git 学习之二
1. git创建版本库创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:$ mkdir learngit$ cd learngit$ pwd/Users/michael/learngit初始化一个Git仓库,使用git init命令。添加文件到Git仓库,分两步:第一步,使用命令git add ,注意,可反复多原创 2016-10-17 21:54:09 · 310 阅读 · 0 评论 -
git 学习之一
注:这篇博文是本人在学习git软件时,自己整理出来的,对于git软件的知识点层次分明,举例实用,最主要的是自己的亲身学习经历,还可以作为工具手册,哪一点不清楚,可以随时查阅。1. git简介Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢?先说集中式版本控制系统,版本库是集中存放在中央服务器原创 2016-10-17 21:42:44 · 601 阅读 · 0 评论 -
详解:tslib移植arm全过程
环境:Ubuntu,交叉编译器,tslib-1.4移植步骤:第一步:获取tslib的源码使用git获取tslib源码:git clone https://github.com/15903016222/tslib.git$ cd tslib第二步:编译,安装tslib-1.4注意:在编译tslib之前确认自己的电脑上已经安装了automake autoconf libto原创 2016-11-09 20:50:33 · 9516 阅读 · 0 评论 -
根文件系统的制作,busybox编译以及中间遇到的问题
软件环境:Ubuntu 14.10 busybox-1.10编译配置:ARCH=armCROSS_COMPILE=arm-linux-make defconfig 或者 make menuconfig配置busybox为默认配置makemiscutils/nandwrite.c: In function ‘nandwrite_m原创 2016-11-09 21:33:46 · 2430 阅读 · 0 评论 -
linux环境的sd卡格式化,分区
环境:ubuntu,大sd卡我们买过来的sd卡,插到电脑上,安装好sd卡的驱动之后,就会在我的电脑里面开到可移动磁盘,实际上我们看到的这个可移动磁盘可用空间就是sd卡的第一个分区,只不过,这个sd卡的就分了这一个区,而且这一个区就占了sd卡的全部内存。现在我们进行分区,无非就是增加分区格式化他们。sd卡格式化,分区步骤:1. 将sd卡通过卡座连接到电脑上usb上2. 查看ubu原创 2016-10-19 22:56:01 · 4868 阅读 · 0 评论 -
selected device is not a touchscreen I understand
具体tslib的移植在上一篇博客中已经做了详细的说明:http://blog.youkuaiyun.com/hpu11/article/details/53105947最近两天一直在做tslib移植触摸屏校准问题,在经过tslib编译安装移植配置完成后,在开发板上测试,正在满怀期待的等待十字光标出现的那一刻,开发板上出现了光标,兴奋的去点击它,失望的是终端没有任何反应,光标一直还是哪一个光标,显示屏上的光原创 2016-11-10 21:14:57 · 1540 阅读 · 0 评论 -
error while loading shared libraries : libts-0.0.so.0:cannot open shared object file: No such file o
这是我在运行自己写的qt程序时,爆出的错误,从错误的地方来看,是我们的库中缺少一个libts-0.0.so.0的动态库,如果开发经验比较丰富的人都会知道这个库是tslib的一个库,而我们做tslib移植的时候却没有移植进去这个库,这个库在什么地方呢,它也是藏得比较隐蔽,这可能在windonw系统下边如果隐藏了,我们很难找到,可是我们是linux系统,找一个文件还是很方便的只需要一条指令我们就可以轻原创 2016-11-10 21:41:25 · 4785 阅读 · 5 评论 -
ldd 查看可执行文件所依赖的库有哪些
ldd是linux下的一个脚本命令,我们可以通过各种途径去查找它,作用:打印可执行文件依赖的库。举个实用的例子:ehome是我自己写的一个只能家具的程序,然后经过交叉编译得到的一个可执行文件,我们要查看这个可执行文件所依赖的库有哪些?$ ldd ehome以下是对ldd命令的详细介绍,具体可参照:http://blog.youkuaiyun.com/cyberrusher/arti原创 2016-11-10 21:58:35 · 6740 阅读 · 0 评论 -
Linux如何手动挂载/卸载u盘
1. 首先你得保证你的U盘的格式是fat格式。先进入/mnt/目录新建一个usb目录cd /mnt/mkidr usb2. 先fdisk -l,然后插上U盘,fdisk -l查看是否有新的硬盘添加上来了?最好使用sudo fdisk -l 因为这个查看大部分都需要权限3. 然后执行挂载mount -t vfat原创 2016-11-14 19:51:51 · 2869 阅读 · 1 评论 -
写一个简单脚本文件判断文件的存在性
实现代码一、?123456789101112131415161718192021222324252627282930313233#!/bin/sh # 判断文件是否存在 # link:www.jb51.n原创 2016-11-14 20:03:16 · 1114 阅读 · 0 评论 -
触摸屏与usb鼠标同时支持
最近,做系统移植,根文件系统自己做的,移植好tslib,也可以触摸屏校准,触摸屏也可以正常使用,但是插上usb鼠标时,系统能枚举出usb的信息,也能判断出是鼠标设备,但是移动鼠标,左右点击鼠标,屏幕上的鼠标就是没反应。经过一番搜索,终于找到了解决方法。1. 首先找到设备文件(/dev/input)下有这样几个节点,mice, mouse0, event0, event1 ... ...输入原创 2016-11-24 20:55:32 · 4677 阅读 · 0 评论 -
内核裁剪和部分选项的意义
嵌入式驱动开发,内核开发,都避免不了的和Linux打交道,尤其是做系统移植,在编译内核的时候,我们都需要把没用的内核模块给删除掉,以减少内核的文件大小,这当然也是嵌入式的一个特性。好在现在的硬件技术已经很发达了,内存芯片,处理器速度都能满足我们正常的需求,所以,对内核的裁剪也没有之前那么严格,不过作为一个Linux开发者,这些内核的配置确实我们不得不了解的一部分内容。一下是关于内核配置的部分说转载 2016-11-24 21:07:35 · 13375 阅读 · 4 评论 -
printk打印级别输出
内核的打印函数和用户空间的打印函数是相同的,只是关键字不太一样,内核是printk,而用户空间则是printf。在内核空间只不过有一个打印级别的设置,所谓的打印级别不过是几个宏定义printk的打印级别一共有8个级别:数字越小说明打印级别越高#define KERN_EMERG "" /* system is unusable */#define KERN_ALERT原创 2016-11-24 21:31:13 · 5487 阅读 · 0 评论 -
结构体,联合的位域定义方法,以及结构体大小的计算
结构体有一种定义方式叫做位域定义方式,如下:struct ctl_register {int a :16;char c :4;};这种定义方法,一般常用在嵌入式开发的内核层的代码中经常出现。int a :16; 代表a只占int的低16为,也就是a的取值范围0~0xffff ,如果在赋值的时候,a的值超过界限,那么只能舍弃前边的部分,只保留低16位同理 char原创 2016-11-24 21:48:13 · 2086 阅读 · 0 评论 -
c语言中__attribute__的意义
我们在进行定义数据结构计算数据结构大小的时候,或者进行网络通讯的socket发送数据的时候,都会遇到一个共同的问题:数据对齐问题。这个问题是硬件为提高访问数据的效率,引出的问题,这里就不具体说这样为什么可以提高数据的访问效率,有兴趣的人,网上都有。既然这个问题是实实在在存在的,并且软件发展了这么多年,也肯定有破解之道,下面就简单的介绍常见的3种方法:1. 手动对齐,根据自己定义的数据结原创 2016-11-24 22:11:53 · 62857 阅读 · 1 评论 -
linux播放音乐,录音命令-----arecord,aplay
用了这么长时间的Linux系统,是不是还没有用Linux听过音乐,一般使用Linux系统的人都是纯属办公需要或者自己对软件开发玩的,很少是做日常生活电脑使用。在linux下也同样有播放音乐的软件,包括桌面式的音乐播放软件,这些桌面软件在Linux社区都能找到,现在要说的是Linux下怎么用命令去播放音乐。在pc机上或者根文件系统稍微正式一点的开发板上,都会安装有alsa软件,这是一个aud原创 2016-11-24 22:27:54 · 40070 阅读 · 0 评论 -
Unix或Linux中&、jobs、fg、bg等命令的使用方法
fg、bg、jobs、&、ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的一.& 最经常被用到这个用在一个命令的最后,可以把这个命令放到后台执行二.ctrl + z可以将一个正在前台执行的命令放到后台,并且暂停三.jobs查看当前有多少在后台运行的命令四.fg将后台中的命令调至前台继续运转载 2016-11-24 22:37:35 · 766 阅读 · 0 评论 -
linux tftp服务器搭建与测试
1. 安装tftp服务器sudo apt-get install tftp-hpa tftpd-hpatftp-hpa是客户端tftpd-hpa是服务器端 2. 配置tftp服务器sudo vim /etc/default/tftpd-hpa将原来的内容改为:TFTP_USERNAME=”tftp”TFTP_ADDRESS=”0.0.原创 2017-02-06 10:33:58 · 1168 阅读 · 0 评论