嵌入式Linux开发
文章平均质量分 90
介绍和分享嵌入式Linux开发技术,包括嵌入式软硬件设计、系统移植、驱动开发等知识和经验。
阿基米东
本科毕业于国内某知名双非理工大学,当过校队球员,后自学编程,专注于嵌入式软件开发十余年,在物联网、机器人、汽车等领域拥有实战经验,也是多个开源项目的贡献者,对 Web 前后端、AI 技术略知一二。立志成为一名杰出的开源创客,让世界因我而变得更美好!
展开
-
使用 GPSD 快速读取 GPS 信息
GPSD 是一系列管理 GPS 设备和其他用于导航与精确计时的传感器的工具,包括航海自动识别系统(Automatic Identification System)的无线电广播设备和电子罗盘。其中最主要的程序是一个叫做 gpsd 的服务守护进程,它管理着这些传感器,并且在 TCP/IP 端口生成 JSON 流报告。其他的程序包括用来展示代码模型和各种诊断工具的客户端。自动探测并识别 GPS 协议,同时支持多个 GPS 设备,并且可以动态进行设备控制;支持 PPS 并且与 NTPD 结合,实现时间服务;原创 2022-12-14 23:48:20 · 2826 阅读 · 0 评论 -
gcc 命令详解及最佳实践
介绍GCC(英文全拼:GNU Compiler Collection)是 GNU 工具链的主要组成部分,是一套以 GPL 和 LGPL 许可证发布的程序语言编译器自由软件,由 Richard Stallman 于 1985 年开始开发。GCC 原名为 GNU C语言编译器,因为它原本只能处理 C 语言,但如今的 GCC 不仅可以编译 C、C++ 和 Objective-C,还可以通过不同的前端模块支持各种语言,包括 Java、Fortran、Ada、Pascal、Go 和 D 语言等等。编译过程GC原创 2021-06-12 15:48:57 · 27182 阅读 · 4 评论 -
printk 内核打印
printk 在内核源码中用来记录日志信息的函数,只能在内核源码范围内使用,用法类似于 printf 函数。printk 函数主要做两件事情:将信息记录到 log 中;调用控制台驱动来将信息输出。printk 介绍printk 将内核信息输出到内核信息缓冲区中,内核缓冲区在 kernel/printk/printk.c 中定义:static char __log_buf[__LOG_BUF_LEN] __aligned(LOG_ALIGN);内核信息缓冲区是一个环形缓冲区(Ring Bu原创 2021-05-15 01:52:03 · 5498 阅读 · 0 评论 -
Linux 模块导出符号 EXPORT_SYMBOL
概述EXPORT_SYMBOL 宏的使用时出现在 Linux 2.6 版本之后,在 Linux 2.4 内核中,默认的非 static 函数和变量都会自动导入到内核空间,不需要用 EXPORT_SYMBOL() 做标记的。出于安全考虑,不久之后 Linux 2.6 修改为默认不导出所有的符号,需要导出的符号使用 EXPORT_SYMBOL() 进行标记。1. EXPORT_SYMBOL 宏的作用EXPORT_SYMBOL 标签内指定的符号(函数或变量)对全部内核代码公开,不用修改内核代码就可以在内核模原创 2021-01-20 17:41:17 · 3014 阅读 · 1 评论 -
/proc/config.gz 是什么
简述Linux 可以在内核本身存储用于内核构建的 gzip 内核配置文件副本,并通过 /proc/config.gz 提供给用户。也就是说,/proc/config.gz 就是当前的 Linux 内核配置文件,并且是用 gzip 格式压缩过的。但不是所有的 Linux 发行版都有 /proc/config.gz 文件,大部分常见的 Linux 发行版就没有提供,比如 Ubuntu。只有当内核配置 CONFIG_IKCONFIG 和 CONFIG_IKCONFIG_PROC 为 y,才会在 /proc 中原创 2020-10-03 10:52:20 · 8365 阅读 · 0 评论 -
Minicom 串口调试利器
介绍Minicom 是 Linux 下一款常用的命令行串口调试工具。其功能与 Windows 下的超级终端相似,可以通过串口控制外部的硬件设备,通常用于对嵌入式设备进行管理。在 Ubuntu 环境下,使用如下命令安装:sudo apt-get install minicom第一次使用会出现下面的提示:warnning:minicom configuration file not found, using defaults为方便使用,建议根据实际使用情况进行配置。配置使用前需要进行配置,执行原创 2020-05-24 01:27:48 · 8147 阅读 · 5 评论 -
如何做让客户满意的 Linux 系统
出于成本控制和产业上下游合作关系,产品制造商往往会选择与方案提供商合作,使用他们的硬件模块和 Linux 系统。然而,受地理位置和对客户的重视程度影响,方案提供商的服务质量参差不齐,这也直接影响到了下游企业的生产环节和产品质量。实际上,一个让客户满意的 Linux 系统,除了满足功能和性能这两方面的基本需求之外,在生产、测试、维护等方面也不容忽视。易于生产的系统一旦产品研发完成,生产资料将会...原创 2020-03-18 12:14:32 · 544 阅读 · 0 评论 -
ALSA 音频数据传输 underrun 和 overrun
在 ALSA 数据传输中,最容易出现的错误是 underrun 和 overrun。pcm 播放的时候,接口 snd_pcm_writei 返回 -EPIPE,为 underrun(不足)录制音频的时候, 接口 snd_pcm_readi 返回 -EPIPE, 为 overrun(超载)使用 ALSA 架构的驱动程,在实际开发使用过程中,比较常见的错误有 -EPIPE,为什么会出现呢?肯...原创 2020-03-09 22:43:11 · 6739 阅读 · 3 评论 -
浅谈I2C总线
I2C(Inter Integrated Circuit,内部集成电路)总线是价格低廉却很有效的用以互连小规模嵌入式系统内的外设的网络。I2C 总线有时候也叫作 IIC,它已有20多年的历史了。I2C 接口和 SPI 接口的作用相同,但二者的使用方法有些不同。 I2C 总线用两根线来连接多支路总线中的多个设备。这种总线是双向、低速的,并与公共时钟同步。可以直接将一个设备接到 I2C 总原创 2016-05-30 09:45:54 · 9829 阅读 · 0 评论 -
浅谈SPI总线
串行外围设备接口(Serial Peripheral Interface,SPI)是由 Motorola 公司开发的,用来在微控制器和外围设备芯片之间提供一个低成本、易使用的接口(SPI 有时候也被称为4线接口)。这种接口可以用来连接存储器、AD/DA转换器、实时时钟日历、LCD驱动器、传感器、音频芯片,甚至其他处理器。目前支持 SPI 的元件很多,并且还在不断增加。 这里需要提一下,原创 2016-05-27 22:14:14 · 5431 阅读 · 0 评论 -
BeagleBone Black 上手体验
发展历史第一代 BeagleBoard 开发板推出于2008年,第三代开发板被命名为 BeagleBone,从这一代开始将 GPIO 口统一放置到开发板的两侧了。BeagleBone Black 诞生于2013年,它是继 BeagleBone 后的新版本,中国版的价格是 399 RMB。BeagleBoard 家族的开发板均采用德州仪器的 ARM 处理器,BeagleBoard 系列开发板的一大...原创 2019-01-12 13:46:38 · 14512 阅读 · 1 评论 -
Linux下读写FLASH驱动——MTD设备分析
最近在学习驱动读写flash的代码部分。经历了可笑的过程:开始我知道flash用通过spi口来读写。所以就到了driver/spi 下面看相关代码。发现有个spidev.c里面有read/write/ioctl等函数。而且还有一个davinci_spi_master.以为调用spi驱动的时候会首先调用到这里,于是就想怎么在上层应用里将spidev.c里open调用到就可以了。最后修改了一些地方...转载 2018-05-04 15:23:58 · 11177 阅读 · 0 评论 -
Linux 驱动 SPI Flash(W25Q80DV)
W25Q80DV 是 Winbond 的一款 SPI Flash,容量大小为 8M bit。如果还没看 W25Q80DV 的数据手册,赶紧去看! https://blog.csdn.net/lu_embedded/article/details/80682374 本文描述的是在 i.MX6q 硬件平台上添加 W25Q80DV 芯片(SPI 设备),Linux 内核版本为 kerne...原创 2018-06-13 19:21:27 · 17244 阅读 · 2 评论 -
Linux 驱动 SPI EEPROM(M95080W)
驱动模板,我这里是找的EEPROM的,它在drivers/misc目录下drivers/misc/eeprom/at25.c设备树节点 Documentation/devicetree/bindings/misc/at25.txt原创 2018-06-13 19:25:56 · 2760 阅读 · 1 评论 -
解读Datasheet系列:M95080W(ST,SPI EEPROM)
本文只对 M95080W 数据手册的一部分进行解读,其涵盖的内容基本足够开发标准 SPI 接口的 EEPROM 驱动。完整的 Datasheet 下载: https://download.csdn.net/download/luckydarcy/10443186 M95160-x 和 M95080-x 是电可擦除非易失性存储器(EEPROM)设备,通过高速 SPI 兼容总线进...原创 2018-06-13 17:41:49 · 5215 阅读 · 4 评论 -
解读Datasheet系列:W25Q80DV(华邦 SPI Flash)
本文只对 W25Q80DV 数据手册的一部分进行解读,其涵盖的内容基本足够开发标准 SPI 接口的 Linux 驱动和裸板驱动。完整的 Datasheet 下载: https://download.csdn.net/download/luckydarcy/10443182一般描述 W25Q80DV(8M-bit)是一个串行 Flash 存储器。容量为 8M-bit(存储器被...原创 2018-06-13 17:12:37 · 20521 阅读 · 0 评论 -
ARM Linux RTC 时间的读取与设置
问题描述 RTC 芯片采用 PCF8563T,Linux 系统使用 date 设置时间后用 hwclock -w 同步到 RTC,一段时间后 Linux 系统时间与本地时间相差 8 个小时。分析问题 直觉告诉我们这是时区造成的,要么是系统的时区配置不对,要么是 RTC 时间的读写不对。时区配置主要是两个文件:/etc/localtime 和 /etc/timezone,内容...原创 2018-06-06 12:09:54 · 9658 阅读 · 0 评论 -
嵌入式开发常见英文单词及缩写
【前言】 做嵌入式开发,避免不了要看芯片手册(包括参考手册、用户手册等),通常在开头的章节会有“Documentation conventions”,意思就是编写文档时的一些约定规则,其中就包括很多半导体行业的专业术语及其英文缩写。因此,为了看明白相关文档,我们最好还是记一下这些常用的专业词汇以及它们的缩写吧。英文缩写ARM:Advanced RISC Machine AAPCS:ARM A原创 2017-10-31 18:13:16 · 9600 阅读 · 0 评论 -
你知道 GNU Binutils 吗?
概述 从事 Linux 开发的朋友们都不可避免地用到一些工具,比如 objcopy、nm、objdump、readelf 等等。其实这一系列的工具,就是所谓的 Binutils,当然 GNU 就表示它们都是可以自由地使用的 GNU 软件。 GNU Binutils,是 GNU Binary Utilities 的简写,一般简称为 Binutils。中文可以翻译为 GNU 的二进制工具集。显然原创 2017-10-11 16:25:43 · 6969 阅读 · 2 评论 -
万能 Makefile 模板
在 Linux 编程时,对于很多小工程来说,很多时候似乎没有必要用 autoconf 和 automake 工具来生成 Makefile,反而自己写一个 Makefile 更省事。那么这里给大家提供一个简单的 Makefile 模板,根据需要作相应修改,可以适用于很多小项目。CC=gccSRCS=$(wildcard *.c */*.c)OBJS=$(patsubst %.c, %.o, $(S原创 2017-08-06 23:54:49 · 5656 阅读 · 5 评论 -
每个Linux开发者都应该知道的一些知识
如何学习Linux 作为现代操作系统的代表之一,Linux操作系统非常复杂,内部有多得令人眼花缭乱的各种组件在同步运行和相互通信。对于初学者来说,我认为理解操作系统工作原理最好的方法是利用抽象的思维去理解,也就是说,你可以暂时忽略大部分细节。就像坐车一样,通常你不会去在意车内固定发动机的装配螺栓,也不会关心你走的路是谁修筑的。如果你是一名乘客,可能只会关心如何打开或关闭车门、如何系好安全带以及车要原创 2017-07-02 23:55:27 · 2622 阅读 · 0 评论 -
基于Qt的ARM-Linux系统测试工具
GYT_BOX 是一个特地为 ARM Linux 平台开发的基于 Qt 的图形界面系统测试工具,提供一些常用外设的测试和校准功能、系统设置、监测等功能。 在 Yocto 系统 Sato 桌面的 All 或 Settings 页面可以找到“GYT Box”图标,如图1所示,点击图标即可启动程序。 图1 在 All 页面找到 GYT Box 应用程序 GYT Box 的左侧是功能栏,目前包括原创 2017-06-26 23:47:55 · 2411 阅读 · 2 评论 -
嵌入式Linux截图工具gsnap移植与分析
由于 Linux 系统的 FrameBuffer 机制,把屏幕上的每个点映射成一段线性内存空间,这样,程序就可以通过改变这段内存的值来改变屏幕上某一点的颜色。如果我们想把当前的显示内容保存起来,可能会想到如下命令:# cat /dev/fb0 > fb_data.raw 反过来,可以将这些数据回显到 framebuffer 中:# cat fb_data.raw > /dev/fb0 使用 cl原创 2016-12-30 01:05:12 · 4446 阅读 · 0 评论 -
NanoPi-NEO——系统配置工具npi-config
npi-config 是我们这个 NanoPi-NEO 系统下的一个命令行的系统配置工具,利用它可以对系统进行一些初始化的配置,可配置的项目包括:用户密码、系统语言、时区、Hostname、SSH 开关、自动登录选项等。在命令行执行以下命令即可进入:sudo npi-config npi-config 的显示界面如下所示: 图1.17 系统配置工具npi-config的显示界面 npi-con原创 2017-04-26 23:44:01 · 6049 阅读 · 0 评论 -
i.MX平台Qt交叉编译环境搭建
主机环境:Ubuntu 12.04, 64位 。 交叉编译工具:Poky 1.5.3 交叉编译工具链及相关工具1、安装交叉编译工具 将 poky 交叉编译工具压缩包解压到 /opt 目录。$ sudo cp fsl-imx-x11-Yocto_1.5.3.tar.bz2 /opt$ cd /opt$ sudo tar jxvf fsl-imx-x11-Yocto_1.5.3.tar.bz2原创 2017-02-21 00:48:37 · 5718 阅读 · 1 评论 -
NanoPi-NEO——初体验
2 NanoPi-NEO初体验 上一节我们介绍了NanoPi NEO的外观、资源、接口等,是不是对NEO充满了期待?事不宜迟,我们马上来体验一下吧! 图1.4 NanoPi NEO v1.3开箱检查 因为NEO是使用SD卡启动的,所以我们需要一张带运行系统的microSD卡/TF卡,本次体验使用的系统是Ubuntu-Core with Qt-Embedded。好,那开始吧!2.1 准备工作原创 2017-04-25 10:32:42 · 15158 阅读 · 4 评论 -
NanoPi-NEO——介绍
1 NanoPi-NEO 介绍 NanoPi NEO(以下简称 NEO)是友善之臂团队面向创客、嵌入式爱好者,电子艺术家、发烧友等群体推出的又一款完全开源的掌上创客神器。它的尺寸只有 40x40mm,接口可兼容树莓派 GPIO。 NEO 采用了全志四核 A7 处理器 H3 芯片(SoC),配备了 256MB/512MB 内存,带有1个 USB Type-A 口和百兆以太网口,通过 Micr原创 2017-04-25 09:54:33 · 10415 阅读 · 1 评论 -
嵌入式 Linux 的分类
由于 Linux 所具备的开源、稳定、高效、易裁剪、硬件支持广泛等优点,使得它在嵌入式系统领域近几年内迅速崛起。目前嵌入式 Linux 系统开发已经开辟了很大的市场,同时也开发出很多成型的产品,这些产品主要分如下三类:专门为 Linux 的嵌入式方向定做的。如何让 Linux 更小、更容易嵌入到对体积、功能、性能等指标要求更高的硬件中去是这些产品的开发方向。专门为 Linux 的实时特性设计的产原创 2017-03-05 18:16:35 · 3502 阅读 · 1 评论 -
Linux下查看串口是否可用的笨方法
最近尝试将一个网关程序从 VxWorks 平台移植到 Linux 平台。在串口方面遇到了一些问题,这里记录一下。 首先在 VxWorks 下,用 devs 命令查看设备:-> devsdrv name 0 /null 1 /tyCo/0 1 /tyCo/1 2 /pcConsole/0 2 /pcConsole/1 9 host: 4 /ram 11 /vio原创 2017-01-12 19:33:03 · 18441 阅读 · 4 评论 -
大小端模式 & 字节序
大、小端模式的说法,来自乔纳森·斯威夫特的小说《格列夫游记》,在小人国内部分裂成 Big-endian 和 Little-endian 两派,他们的争论在于一派要求从鸡蛋的大头把鸡蛋打破,另一派要求从鸡蛋的小头把鸡蛋打破。斯威夫特借以讽刺英国的政党之争,而计算机工业则借此表示数据储存顺序的分歧。 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式原创 2016-12-14 20:17:25 · 2974 阅读 · 0 评论 -
Linux操作系统实时性分析
1. 概述 选择一个合适的嵌入式操作系统,可以考虑以下几个因素: 第一是应用。如果你想开发的嵌入式设备是一个和网络应用密切相关或者就是一个网络设备,那么你应该选择用嵌入式Linux或者uCLinux,而不是uC/OS-II。 第二是实时性。没有一个绝对的数字可以告诉你什么是硬实时,什么是软实时,他们之间的界限也是十分模糊的,这与你选择什么样的CPU,它的主频、内存等参数有一定关系。如果原创 2016-12-11 13:02:46 · 23487 阅读 · 5 评论