![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
embedded development
文章平均质量分 63
奔跑的码仔
心有多大,舞台就有多大
展开
-
Flash技术概述
Flash全称flash memory,也就是平时说的“闪存”。经常被用在嵌入式领域,比如手机、平台、电脑主板等等。绝大部分的U盘、SDCard、MMC卡、TF卡等移动存储设备也都是使用 Flash 作为存储介质Flash Memory主要可以分为NOR Flash、NAND Flash、eMMC、UFS几种类型。NOR flash支持片上执行,可以在上面直接运行代码,软件驱动比NAND简单,一般小容量的用NOR型,因为小容量NOR读取速度快。原创 2023-03-23 17:52:40 · 591 阅读 · 1 评论 -
ARM平台交叉编译|OpenSSL
编译步骤准备编译平台OS:Ubunti16.04交叉编译器Compiler:aarch64-linux-gnu-gccOpenssl:openssl-3.0.1编译配置./Configure --prefix=/dir/to/install --cross-compile-prefix=aarch64-linux-gnu- -no-asm sharedprefix:openssl安装目录–cross-compile-prefix:交叉编译器前缀no-asm:不使用汇编代码。由于是原创 2022-03-07 17:13:17 · 3818 阅读 · 1 评论 -
ARM平台交叉编译|MQTT-mosquitto
mosquitto编译方式分为两种:cmake和make。windows、Mac平台使用cmake编译方式,其他平台,包括linux平台,直接使用make进行编译。windows7下编译mosquitto详细介绍了windows7环境下编译mosquitto的步骤。本文所介绍的内容是关使用于某种ARM平台下的mosquitto的编译步骤。编译环境宿主机:Ubuntu 16.04Host: ARM,Cortex-A55交叉编译器:aarch64-linux-gnu-gcc, 7.2.1 20171原创 2022-03-08 10:13:32 · 3130 阅读 · 0 评论 -
极简系列|日志模块-clog
日志作为应用程序调试和维护的基本手段被广泛使用,像是谷歌的glog,java领域的log4j,它们都是功能强大的大型日志中间件。可是,在特殊的领域,比如是嵌入式开发领域,由于资源的限制,可能不能直接应用这些“庞大大物”,这里要介绍的clog,十分适合资源受限的嵌入式系统,其由C语言开发,整个代码不到400行,但它的功能可以满足基本的开发需求。clog基本属性:支持日志级别设置(DEBUG|INFO|ERROR|FATAL)支持多线程,是线程安全的。日志输出路径可配置。单个日志文件输出,并且日志是原创 2022-02-07 15:09:53 · 1143 阅读 · 0 评论 -
我的Linux名片
面试官: “你好,先自我介绍一下吧。”程序猿:“你好,我是一名嵌入式Linux软件工程师,具有丰富的inux、嵌入式系统、Android相关的开发经验,擅长C/C++,熟练使用GNU/GCC、GDB、VIM等开发工具,这是我的名片!”面试官:“哇,我还是第一次见到这样别致的名片,酷!,把电路板做成名片,不错。它能跑起来吗?”程序猿:“别小看它,它不仅能跑,而且还是Linux系统,最新版本的内核哦,里面还集成了”...原创 2021-10-10 20:24:01 · 12842 阅读 · 10 评论 -
Linux i2c-dev简析
上篇文章简要分析了如何编写一个Linux下的I2C设备驱动程序。编写驱动程序毕竟有一定的门槛,需要熟悉内核各种相关的开发规范,有时为了快速的测试一款I2C设备的功能,临时编写驱动程序可能会使得工期比较紧张;并且有时I2C设备十分的简单,为此编写一个单独的驱动程序未免有点“兴师动众”。i2c-dev框架很好的解决了上面的问题,使用该框架可以使我们在用户空间上编写I2C通信程序。i2c-dev在内核中封装了关于I2C通信所需要的所有通信细节,通过ioctl接口将这些功能暴露给用户空间程序调用。用户应用程序使用原创 2020-08-04 15:33:42 · 6251 阅读 · 0 评论 -
嵌入式Linux 硬件时间-系统时间-时区设置
Linux系统时间分为两种:系统时间和硬件时间。系统时间为Linux内核时间,硬件时间一般为BOIS中的RTC时间。Linux内核在启动时,会尝试读取BIOS中的RTC时间,并以此为基准设置系统时间。内核启动之后,系统时间和硬件即为两个独立的时间,各自运行。嵌入式Linux系统开发时,同样需要提供硬件来为系统提供时间基准,这个硬件一般就是RTC芯片,比如,rx8010。Linux关于时间的配置包括:系统时间设置、硬件时间设置、时区设置。时区配置tzselect命令用于设置系统的当前时区。在桌面系统上,原创 2020-07-07 10:31:46 · 2499 阅读 · 0 评论 -
copy_{to,from}_user Vs memcpy
Linux地址空间熟悉Linux内核的开发人员都知道,Linux下的进程地址空间分为内核空间和用户空间,对于32bit系统来说,典型的空间划分为:1G(内核空间)+3G(用户空间),对于这种划分来说,内核空间地址范围:0xC000 0000 ~0xFFFF FFFF,用户空间地址范围为:0x0000 0000 ~ 0xBFFF FFFF。当然,为了需要,我们可以将地址空间配置成其他方式,比如2G:2G等等。Linux虚拟地址机制大家知道,Linux进程中使用的地址是虚拟地址,进程在操作这些地址时,MM原创 2020-06-29 23:01:10 · 1893 阅读 · 0 评论 -
linux 文件系统损坏修复方式
使用fsck修复树莓派受损文件系统原创 2020-06-24 23:02:04 · 4952 阅读 · 0 评论 -
Linux内核开发基础-低精度timer_list和高精度hrtimer定时器
Linux内核定时器开发-低精度和高精度定时器上篇文章讲解了如何正确的使用内核延时函数,在进行驱动开发时,可能会经常用到精确地延时操作。除此之外,如果要实现一个定时任务,那就需要用到定时器。作为一项基础功能需求,Linux内核提供了定时器相关的实现。下面就具体看一下,Linux内核所提供的定时器实现。定时器种类为了适应不同的应用场景,Linux内核提供了两种定时器:低精度和高精度定时器。低精度定时器基于硬件的周期性中断实现,其定时周期的粒度为1/HZms,例如,内核HZ为1000,那么低精度的定时器最原创 2020-06-18 09:54:02 · 3741 阅读 · 4 评论 -
嵌入式Linux应用崩溃调试-难以追踪的栈信息
在进行嵌入式Linux应用程序开发时,经常会用到gdb对崩溃日志进行分析,一般情况下,可以直接定位到崩溃的位置。但有时分析core文件时,却看不到有意义的崩溃栈,这时问题就有点复杂了,出现这种现象的原因可能有这么几个:应用程序在编译时没有指定-g选项,导致可执行程序没有调试信息。应用程序所依赖的动态库和静态库没有调试信息。应用程序的运行时环境没有调试信息,比如libc等。嵌入式Linux系统应用程序运行时环境和交叉编译工具链的运行时环境版本不一致,比如,嵌入式Linux环境中所使用的libc库和交原创 2020-06-04 11:26:41 · 4735 阅读 · 0 评论 -
内核开发基础-如何使用内核延时
从事Linux内核开发特别是驱动开发的小伙伴,肯定需要经常使用到定时器,比如,按键的去抖、LED屏幕显存buffer的刷新等。同时,在控制硬件时,可能会用到十分精确地短延时,这时,定时器的精度就不能满足这种需求了,这时就会使用到高精度定时器和忙等延时。今天就来简要说一下如何正确的使用内核提供的delay和sleep函数。这篇文章面对的读者是从事与驱动程序开发,但是,对于内核delay和sleep实现机制不是很熟悉的开发人员。如何插入delays首先,你需要回答一个问题,“需要使用delay的代码存在于原创 2020-05-31 22:52:20 · 1199 阅读 · 0 评论 -
DTS中如何配置设备相关的pinctrl
设备驱动如何在dts配置pins进行嵌入式Linux驱动开发时,不可避免的会涉及到DTS相关的编写工作,而其中,最为重要的一项工作就是pinctrl相关的配置,这包括pins的功能选择(作为普通IO,还是作为外围控制器的pins)以及pins的配置(pull-up/pull-down、驱动能力、三态等)。内核中的pinctrl子系统抽象了不同SoC中关于pins的管理方式,Linux内核之pi...原创 2020-03-29 22:53:20 · 5071 阅读 · 0 评论 -
Linux 下利用netem模拟广域网特性
一、netem 与 tc: netem 是 Linux 2.6及以上内核版本提供的一个网络模拟功能模块。该功能模块可以用来在性能良好的局域网中,模拟出复杂的互联网传输性能,诸如低带宽、传输延迟、丢包等等情况。使用 Linux 2.6 (或以上)版本内核的很多发行版 Linux都开启了该内核功能,比如Fedora、Ubuntu、Redhat、OpenSuse、CentOS、原创 2013-01-11 23:37:17 · 1766 阅读 · 0 评论 -
pjlib简介
本文主要介绍pjlib的基本特性1.PJLIB是什么? pjlib是用于构建可扩展的应用程序,基于C开发的开源的,较小footprint的架构库.由于他具有较小的footprintf,其可以应用到嵌入式应用程序中,同时基于pjlib也可以构建高性能的协议栈.2.下载 PJLIB以及所有的文档都可以在http://www.pjsip.org上获得.3.PJL翻译 2015-02-11 14:53:06 · 1990 阅读 · 5 评论 -
PJLIB 内存池实现
PJLIB内存池1.PJLIB内存池优势1.1 不用于其他的内存池实现方式,PJLIB内存池允许申请不同大小的内存空间1.2 高效率的内存分配过程,内存分配算法复杂度为O(1),这都源于其内存分配 实现简单(只需要少许指针的运算操作),而且不需要加锁.1.3 PJLIB POOL分配的内存很"纯净".PJLIB POOL不需要跟踪应用分配的独立内 存块儿,所以经原创 2016-01-09 15:34:52 · 2959 阅读 · 0 评论 -
交叉编译tcpdump
交叉编译TCPDUMP编译平台 PC:ubuntu-14.04 Cross-tool:arm-none-linux-gnueabi-gcc 4.8.3 Target:Atmel9260编译步骤原创 2016-03-05 11:33:51 · 2218 阅读 · 0 评论 -
Android C/C++开发指南
AndroidC/C++开发指南1.AndroidC/C++简介众所周知,Android作为目前主流的移动终端领域的开发平台,其主要的开发语言就是JAVA。Android借助于JAVA高效、灵活的开发模式,迅速占领了移动互联网开发的半壁江山。基于JDK和Android实现的各种JAVA框架,开发人员可以快速实现各种功能的APP,而且APP的安装和升级维护都实现的方便。对于,Andr原创 2016-11-06 18:07:32 · 13746 阅读 · 2 评论 -
Android系统coredump
1.打开内核coredump功能Android系统的linux内核有可能没有打开coredump功能,可以通过查看android系统是否存在/proc/sys/kernel/core_patten配置项来确定,如果没有该配置项,那么需要重新配置内核,并且重新编译,并将其替换掉目标android系统内核(具体更新方试需要根据不同的硬件而定)。下面为coredump内核配置项的具体位置:make men原创 2017-03-19 11:26:57 · 4688 阅读 · 0 评论 -
01-Linux设备树系列-基本语法
设备树使用本页面介绍了如何为新机器编写设备树。它旨在提供设备树概念的概述以及它们如何用于描述机器。有关设备树数据格式的完整技术说明,请参阅 ePAPR v1.1规范.ePAPR规范比本页面介绍的基本主题包含更多详细信息,请参阅此页面以获取本页未涵盖的更高级用法 .ePAPR目前正在为使用的DeviceTree文档规范新的名称进行更新。基本数据格式设备树是节点和属性的简单树型结构。属...原创 2018-09-04 12:08:06 · 7165 阅读 · 3 评论 -
基于Buildroot的rootfs制作
基于Buildroot的rootfs制作本文当记录使用buildroot制作rockchip-rk3288平台的rootfs过程。1.准备工作首先,需要到Buildroot的官网下载最新版本的源码,以及官方的使用手册。使用手册的第二章说明了Buildroot在Linux上编译时所依赖的工具以及第三方库。下面列列出了可能用到的软件包:sudo apt-get install repo git...原创 2018-12-18 09:12:32 · 6426 阅读 · 1 评论 -
Booting ARM Linux-启动ARM-Linux
文章目录Booting ARM Linux设置和初始化RAM初始化一个串口检测机器类型设置启动数据设置内核标记列表设置Device Tree加载 initramfs调用kernel imageBooting ARM Linux本文翻译自Linux内核文档,如有翻译不当,敬请谅解!以下文字说明与内核的2.4.18-rmk6版本及以上相关。为了引导ARM Linux,您需要一个引导加载程序,它...原创 2019-02-22 11:52:05 · 826 阅读 · 0 评论 -
Linux动态库常见问题之-“cannot open shared object file No such file or directory“的解决办法
Linux编写程序时,会经常的接触动态库,而在程序运行时可能会遇到类似于:libxxx.so cannot open shared object file No such file or directory的问题,这个代表什么含义,该怎么解决呢?含义这个问题代表的含义是,可执行程序在加载libxxx.so库时,找不到该库。至于找不到的情况分为两种:系统里根本不存在libxxx.so库;libx...原创 2019-02-25 11:42:35 · 104832 阅读 · 1 评论 -
1_TX2入门-JetPack安装
NVIDIA JetPack SDK是用于构建AI应用程序的最全面的解决方案。 使用JetPack安装程序使用最新的操作系统映像刷新Jetson Developer Kit,为主机PC和Developer Kit安装开发人员工具,并安装快速启动开发环境所需的库和API,示例和文档。文章目录JetPack包括的内容OS ImageLibrariesDeveloper ToolsSamples下载安...原创 2019-03-29 08:26:17 · 2100 阅读 · 0 评论 -
Linux内存工具解析之free
Linux系统提供了很多关于系统和特定进程对于内存的使用情况的探测和管理工具,其中最耳熟能详的就是free和top。free命令可以为用户提供系统级的内存使用情况报告,top命令更为强大,其可以提供整个系统中所有进程的当前状态信息,当然包括内存使用情况信息。虽然,我们平时经常接触这两个命令,但,真正的要说出两个命令所提供的系统信息的真实含义时,总是感觉有些模棱两可。所以,本文旨在彻底理解两者关于...原创 2019-04-18 17:44:59 · 936 阅读 · 1 评论 -
嵌入式linux inittab解读
文章转载自:http://bbs.chinaunix.net/thread-3637244-1-1.htmlBusyBox会检查/etc/inittab文件是否存在, 如果此文件不存在, BusyBox会使用缺省的inittab的配置。它主要会为系统重引导,系统挂起以及init重启动设置缺省的动作。此外, 它还会为头四个虚拟控制台(/dev/tty1到/dev/tty4)设置启动shell转载 2015-01-22 14:02:42 · 1005 阅读 · 0 评论 -
Linux 下定时器的实现方式分析
文章出处:http://www.ibm.com/developerworks/cn/linux/l-cn-timers/#icomments定时器属于基本的基础组件,不管是用户空间的程序开发,还是内核空间的程序开发,很多时候都需要有定时器作为基础组件的支持,但使用场景的不同,对定时器的实现考虑也不尽相同,本文讨论了在 Linux 环境下,应用层和内核层的定时器的各种实现方法,并分析了各转载 2014-12-14 14:54:02 · 1918 阅读 · 0 评论 -
交叉编译libxml2
arm-linux-gnueabihf-ld原创 2014-10-11 17:15:31 · 3237 阅读 · 1 评论 -
进程地址空间的布局以及进程堆栈帧的结构
前言从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用。当函数调用发生时,新的堆栈帧被压入堆栈;当函数返回时,相应的堆栈帧从堆栈中弹出。尽管堆栈帧结构的引入为在高级语言中实现函数或过程这样的概念提供了直接的硬件支持,但是由于将函数返回地址这样的重要数据保存在程序员可见的堆栈中,因此也给系统安全带来了极大的隐患。历史上最著名的缓冲区溢出攻击可能要算是1988年11月2转载 2013-07-23 23:30:21 · 1884 阅读 · 0 评论 -
C 程序设计语言-读书笔记
说来惭愧,上大学学的第一门计算机编程语言就是c语言。到现在也有将近五年的时间了,可是对于C语言的理解还是停留在表面之上,今天拜读了C语言的缔造者B.W.Kernighan、D.M.Richie编写的C语言程序设计才发现自己真的是从来没有好好学过C语言。废话少说,准备拜读完该书,然后再系统的学习C语言的其他经典巨著,算法C语言实现,Unix编程艺术。1.EOF关于getchar()和putc原创 2013-07-02 21:58:28 · 1244 阅读 · 0 评论 -
linux gdb-多线程调试
linux下应用程序的调试工具主要就是gdb,可能你已经习惯了IDE形式的调试工具。也许刚开始使用gdb作为调试工具,会有诸多的不变,但是一旦你学会了如何使用gdb你就会被其富有魔力的功能所吸引的,下面开始逐步的学习linux下gdb的使用方式。一直以来对于gdb在多线程调试方面的应用好奇,最近,由于项目需要,学习了linux下的gdb在多线程下的调试方法。下面就结合一个简单的案例介绍一下gd...原创 2013-05-05 21:18:07 · 14348 阅读 · 3 评论 -
Ok6410裸板程序开发(1)-开发环境搭建
废话不都说,直接进去正题。本人的开发环境如下:@system:Ubuntu12.04@串口工具:minicom@交叉工具链:arm-linux-gcc4.3.2开发裸板程序时,没有选择Jlink,主要原因就是它不好用,而且还需要另需购买。本人开发依靠的是烧写有uboot的开发板,利用uboot的loady命令将程序直接拷贝到ram中,然后直接执行。虽然,不是完全意义上的裸板开原创 2013-07-07 21:39:40 · 1721 阅读 · 0 评论 -
经验之谈 学习嵌入式开发起步指南
摘要:社区之星记者第四次的采访是CSDN博客专家唐攀,唐攀是华清远见高级研发工程师和高级讲师,他认为要想深入学习嵌入式,要先学好汇编和体系结构,对操作系统要了解透、中断处理、内存管理和内核结构体等等都能熟练掌握,另外再加上代码的阅读能力。对于嵌入式工程师应该会哪些技术,唐攀认为技术只是工具,最主要的还是编程思想唐攀,华清远见高级研发工程师和高级讲师,从事Android底层及系统移植相关转载 2013-03-30 20:24:53 · 1833 阅读 · 0 评论 -
详解大端模式和小端模式
详解大端模式和小端模式一、大端模式和小端模式的起源 关于大端小端名词的由来,有一个有趣的故事,来自于Jonathan Swift的《格利佛游记》:Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令转载 2013-01-15 21:31:43 · 772 阅读 · 0 评论 -
Linux Why and How to use NetLink
Kernel Korner - Why and How to Use Netlink SocketBy Kevin He on Wed, 2005-01-05 02:00. SysAdmin Use this bidirectional, versatile method to passdata between kernel and user space.Due原创 2012-12-31 22:31:36 · 1124 阅读 · 0 评论 -
i++与 i--执行效率
文章出处:http://www.limodev.cn/blog作者联系方式:李先静 昨天同事问了我一个问题,有两个循环语句:for(i = n; i > 0; i–){…}for(i = 0; i {…}为什么前者比后者快?我当时的解释是:i–操作本身会影响CPSR(当前程序状态寄存器),CPSR常见的标志有N(结果为负), Z(结果为0),C(转载 2012-12-27 20:17:57 · 791 阅读 · 0 评论 -
Netlink实现机制
文章出处:http://www.limodev.cn/blog作者联系方式:李先静 手 机内置FLASH容量有限,在磁盘空间不足的情况下,应该提醒用户进行磁盘清理。这个处理在哪里做比较好呢?每次写入数据时由调用者检测显然是不合理的, 因为处理的太多了,何况修改SQLITE等第三方程序也是不明智的,那样会给升级版本带来麻烦。比较好的办法是在文件系统中做处理,最近同事修改了yaffs2支持磁盘转载 2012-12-27 20:28:03 · 787 阅读 · 0 评论 -
C 扩展关键字 typeof 解析
Another way to refer to the type of an expression is with typeof. The syntax of using of this keyword looks likesizeof, but the construct acts semantically like a type name defined withtypedef.原创 2012-11-07 22:46:07 · 901 阅读 · 0 评论 -
linux 内核中container_of和offsetof宏定义解析
问题:如何通过结构中的某个变量获取结构本身的指针???关于container_of见kernel.h中:/*** container_of - cast a member of a structure out to the containing structure* @ptr: the pointer to the member.* @type: the t原创 2012-11-07 22:17:59 · 1182 阅读 · 0 评论 -
QQ 中所使用的GIPS语音技术
2004年12月9日,腾讯发布了QQ2004II正式版,新版在语音通话方面进行了很大的改善。后来笔者在不经意间发现QQ的版权信息中多出一段话:“本软件中使用的GIPS语音引擎和相关商标为Global IP Sound AB公司版权所有.Patens and Patens Pending, Global IP Sound Inc.”这是至今为止QQ第一次在版权声明中加入了第三方版权说明。原创 2013-08-03 22:41:38 · 4437 阅读 · 0 评论