嵌入式Linux开发
文章平均质量分 84
light_in_dark
这个作者很懒,什么都没留下…
展开
-
针对i.MX6Q平台的Qt4.8.5开发环境搭建
一、需要的工具qt4.8.5库和tslib库1、tslib是Linux触摸屏驱动与QT之间的一层库,用于支持event事件,在QT中也配有linux_input选项支持触摸屏,不过由于事件结构与Linux驱动传递的input event不匹配,因而不配使用。 2、tslib是一个开源的触摸屏支持库,它给上层的应用程序,为不同的触摸屏提供了一个统一的接口。 3、tslib是触摸屏用于校准的一个软件原创 2016-09-12 18:03:34 · 911 阅读 · 0 评论 -
项目总结
1、对业务毫无了解; 2、没有明确的产品需求; 3、没有产品设计方案; 4、不具备产品开发需要的技能(例如Qt界面开发); 5、没有进行项目管理(项目经理失职);原创 2017-01-24 10:09:17 · 226 阅读 · 0 评论 -
内存越界问题
一、背景 最近手上的项目出现一个如下的BUG,在网上查了查原来是内存越界的问题。 * glibc detected ./test5: malloc(): memory corruption: 0x2f300b08 **二、延伸 1、通常我们会犯的内存问题大概有以下几种: 1.内存重复释放,出现double free时,通常是由于这种情况所致。 2.内存泄露,分配的内存忘了释放。原创 2017-03-09 14:23:07 · 3270 阅读 · 0 评论 -
alignment fault
什么是对齐异常?简单来说,当CPU访问内存地址时,如果发现访问的地址是不对齐的,硬件(部分)就会自动触发对齐异常。对齐即要求被访问的地址满足其数据类型的位宽要求,比如要访问一个4字节int型的数据,但是提供的地址不是4字节对齐的,那就是不对齐了。也就是说要访问的数据的位宽长度是多少,那么访问的地址就必须是按这个位宽长度对齐的。如果是char类型的,那就没有没有对齐要求了。为什么在部分硬件上出现?部分转载 2017-03-24 09:37:52 · 489 阅读 · 0 评论 -
Alignment trap
遇到的问题: (题意请描述清楚) : 程序执行一段时间(不固定, 一分钟以下) 会出现Alignment trap: xxx(pid) PC=0x0001645 ….. 来自kernel的错误讯息, 因为现在已经把成是尽量精简.. 但还是抓不出错误, 也用 addr2line 这个程序将PC所指出的 function address印出, 但也是没有帮助… 请问要怎样抓这类bug呢? 谢谢!转载 2017-03-24 09:45:12 · 1061 阅读 · 0 评论 -
GDB调试器的使用
一、使用概述GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具,它可以用来调试C、C++等的程序。 GDB的命令行调试采取的是一种交互式的界面,启动GDB后就可以通过各种命令对程序进行调试。GDB命令很多,而且提供了一个在线的帮助命令help。二、使用流程(1)给出实例代码代码文件gdb_example.c,编译程序 $gcc -g gdb_example.c -o gdb_exa原创 2017-04-20 17:06:52 · 456 阅读 · 0 评论 -
关于gettimeofday函数的使用问题
最近在项目中使用到了gettimeofday这个函数来计算系统当前毫秒数,发现这里面有个问题需要特别注意一下。 1、首先来看一下函数原型:int gettimeofday(struct timeval *tv, struct timezone *tz)其中结构体struct timeval定义如下:struct timeval { time_t tv_sec; /* s原创 2017-04-21 16:24:41 · 5470 阅读 · 0 评论 -
SDL介绍
一、简介SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。 SDL使用GNU宽通用公共许可证为授权方式,意指动态链转载 2017-04-26 16:14:45 · 838 阅读 · 0 评论 -
Linux环境下段错误的产生原因及调试方法小结
最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmentation Fault)。借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决。 段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问转载 2017-05-18 10:52:03 · 357 阅读 · 0 评论 -
嵌入式Linux设备驱动开发笔记(一)
一、Linux设备的分类字符设备、块设备、网络设备,三种设备之间的区别是数据的交互模式,分别为: 字节流、数据块、数据包。二、VFS核心结构体VFS核心结构体定义在”linux/fs.h”头文件中。1、struct inode结构体 记录文件的属主、访问时间等信息。当第一次打开文件的时候由VFS创建并初始化。当文件的所有引用都退出后,释放inode; 如果用户态有多个人同时打开一个文件,则VF原创 2017-06-16 11:43:38 · 4254 阅读 · 0 评论 -
嵌入式Linux设备驱动开发笔记(二)
一、内核的时间(1)Tick(滴答)内核采用了一个新的时间单位来进行计时。该时间单位称为tick(滴答),一个tick对应硬件定时器两次中断之间的时间间隔。当前内核每秒钟硬件定时器会发生HZ次中断。tick和秒的换算关系为: 1 tick = 1/HZ秒。 HZ是在内核make menuconfig(内核的.config文件)时确定,如果要修改HZ值,需要重新编译内核。(2)相对时间内核从开机开原创 2017-06-17 10:54:58 · 637 阅读 · 0 评论 -
嵌入式Linux设备驱动开发笔记(三)
一、中断源和中断号中断是硬件通过硬件电路产生的,因此,如果一个外设没有独立的中断线,也就不能产生中断。中断控制器的工作是收集硬件产生的中断,然后根据预先设定好的优先级依次提交给cpu。 对arm处理器来说,中断控制器的发展经历了3个阶段: PIC (Programmable Interrupt Controller) VIC (Vector Interrupt Controller) GIC原创 2017-06-17 12:21:38 · 527 阅读 · 0 评论 -
嵌入式Linux设备驱动开发笔记(四)
一、Linux内核锁保护(1)为什么要保护如果模块中的某个全局变量可以被多个进程/中断同时访问,那么就必须要提供加锁机制进行保护。同时写是不允许的。(2)和加锁保护相关的名词A、临界区(critical region)访问要保护的变量的代码段,称为临界区。临界区中同一时间只能一个人进入。临界区的代码可能分散在不同的函数中。如果要对临界区加锁,则必须保证在临界区的所有部分都加锁。如果有遗漏,则加锁是不原创 2017-06-19 11:06:07 · 601 阅读 · 0 评论 -
嵌入式Linux设备驱动开发笔记(五)
一、设备模型(驱动模型)的介绍和架构device model & driver model 设备模型从2.5版内核引入,最早是为了解决电源管理,热插拔等方面的问题,后来扩展到内核的很多领域。(1)设备结构体设备模型的核心内容是在内存中创建和实际存在设备一一对应的结构体,结构体中记录设备的物理信息,并且通过结构体间的关系对应设备的硬件拓扑。设备结构体的生存周期和设备一致,如果将设备移除,则内核会释放原创 2017-06-19 16:42:57 · 534 阅读 · 0 评论 -
FFmpeg解码USB摄像头MJPEG输出
一、FFmpeg解码流程: 1、注册所有容器格式和CODEC:avcodec_register_all(); 2、查找对应的解码器:avcodec_find_decoder(AV_CODEC_ID_MJPEG); 3、分配编解码器参数数据结构avcodec_alloc_context3(AVCodec *codec); 4、对于部分编解码需要对上一步分配的数据结构进行初始化,因为某些参数在视原创 2017-02-21 09:55:01 · 12329 阅读 · 2 评论 -
VirtualBox虚拟机与主机共享文件
一、在Windows7下安装VirtualBox虚拟机二、在VirtualBox虚拟机中安装Ubuntu16.04系统三、Ubuntu系统与Windows7系统共享文件1、打开VirtualBox中的Ubuntu16.04系统,点击设备/安装增强功能,安装此功能;2、点击设备/共享文件夹,选择固定分配,点击右上角的添加共享文件夹图标,然后点击“其他”选项,选择要共享的Windows下的共享文件夹,例原创 2017-06-21 11:41:46 · 537 阅读 · 0 评论 -
文章标题
一、引言最近终于有时间把《X86汇编语言:从实模式到保护模式》这本书好好读了一遍,真是畅快!这本书从书名看,是一本讲x86汇编语言的书,但它真正的价值是一步一步带领读者进入操作系统的世界,写得非常的好,很佩服作者能够透过这本书将操作系统的原理讲清楚!本人是搞嵌入式开发的,读完这本书后,我觉得完全可以按照此书的写作思路来写一本《从ARM汇编到操作系统》的书,虽然自己对ARM的掌握还很有限,但是我觉得值原创 2017-06-20 17:34:39 · 575 阅读 · 0 评论 -
文章标题
一、系统时钟(一)时钟体系1、时钟控制逻辑:既可以外接晶振,然后通过内部振荡电路产生时钟源;也可以直接使用外部提供的时钟源,它们通过引脚的设置来选择。2、时钟源: (1)一个主振荡器 (2)一个32.768kHz低功耗振荡器 (3)一个低功耗的内部RC振荡器3、时钟管理 (1)SLCK (2)MAINCK (3)PLLACK (4)PLLBCK如图所示: 为了降低在启动系统时对电源的原创 2017-06-24 12:07:55 · 461 阅读 · 0 评论 -
Qt Creator出现error while building问题的解决办法
Qt Creator有时会莫名出现error while building的问题,经过研究发现原因是在projects选项(软件界面的左侧)的配置上出现了错误。打开projects选项界面,发现在General标签下的Qt Version项为空了,此时就会出现error while building的问题,需要重新选择相应的Qt版本,才能恢复Qt Creator的正常使用。原创 2017-01-20 15:58:12 · 2388 阅读 · 1 评论 -
libjpeg库支持解码内存中的jpeg数据
找到jdatasrc.c这个文件(从命名可以看出其跟输入数据相关),在my_source_mgr这个结构体的上方添加一个结构体(jpeg内存块描述相关)如下: typedef struct{ UINT8* img_buffer; long buffer_size; long pos; }BUFF_JPG;然后将my_source_mgr结构的定义修改如下: typ转载 2017-02-10 11:42:16 · 1547 阅读 · 1 评论 -
USB接口WIFI模块在嵌入式Linux下的驱动安装及测试
一、软硬件平台 嵌入式硬件平台:FreeScale i.MX6Q 嵌入式Linux系统版本:3.0.35 二、驱动安装 1、解压驱动源码包 tar xzvf rtl8188EUS_linux_v4.3.24_16705.20160509.tar.gz 2、修改Makefile CONFIG_PLATFORM_I386_PC = n CONFIG_PLATFORM_NE原创 2016-08-22 17:24:20 · 3004 阅读 · 0 评论 -
Windows7下通过U盘安装Ubuntu12.04双系统
一、制作Ubuntu系统的U盘安装盘1、下载ubuntu-12.04-desktop-amd64.iso镜像文件; 2、利用UltraISO软件制作安装盘。二、对Windows7的磁盘分区进行处理1、Windows下的磁盘分区为动态磁盘,需转换为基本磁盘,才能在Ubuntu下识别。利用分区助手工具将Windows下的磁盘分区进行转换。 2、如果Windows下的磁盘分区为4个主分区(本人的磁盘分原创 2016-09-13 17:28:18 · 264 阅读 · 0 评论 -
Ubuntu下使用minicom在主机和目标板之间进行文件传输
方法一:tar -zxvf lrzsz-0.12.20.tar.gzcd lrzsz-0.12.20./configure –cache-file=arm-linux.cachevim arm-linux.cache修改 ac_cv_prog_CC=accvprogCC=gcc为accvprogCC={ac_cv_prog_CC=gcc} 为 ac_cv_prog_CC={ac_cv_pr转载 2016-09-14 16:28:51 · 2242 阅读 · 1 评论 -
ARM Linux内核驱动异常定位方法分析--反汇编方式
Unable to handle kernel paging request at virtual address错误调试转载 2016-09-08 09:33:35 · 362 阅读 · 0 评论 -
ARM平台移植GDB
一、准备工作: 1、http://ftp.gnu.org/gnu/ncurses/下载源码:ncurses-5.6 2、http://ftp.gnu.org/gnu/gdb/下载源码:gdb-6.8 二、编译ncurses 5.6 ./configure –host=arm-fsl-linux-gnueabi –prefix=/home/gdb/bin –without-ada –enabl原创 2016-09-28 18:30:44 · 404 阅读 · 0 评论 -
嵌入式Qt开发之环境配置
一、Qt/E的开发流程 1、Qt源码—–>交叉编译—–>生成Qt库 2、Qt库的作用: a、用在开发主机上,供编译Qt应用程序使用; b、用于目标板上,运行Qt应用程序时动态加载。 二、Qt源码交叉编译 1、开发板厂商通常会提供交叉编译好的Qt库,例如飞凌嵌入式提供了编译好的Qt4.8.5库qt4.8.5-sdk-32bit.tar原创 2016-12-06 10:38:34 · 3347 阅读 · 0 评论 -
嵌入式Qt开发之Qwt的移植
一、Qwt简介 qwt是一个基于LGPL版权协议的开源项目, 可生成各种统计图。它为具有技术专业背景的程序提供GUI组件和一组实用类,其目标是以基于2D方式的窗体部件来显示数据, 数据源以数值,数组或一组浮点数等方式提供, 输出方式可以是Curves(曲线),Slider(滚动条),Dials(圆盘),Compasses(仪表盘)等等,目前已经应用到许多工业领域,同时qwt也致力于3d的开发。原创 2016-12-06 12:11:03 · 729 阅读 · 0 评论 -
Qt之格栅布局(QGridLayout)
一、简述QGridLayout:格栅布局,也被称作网格布局(多行多列)。栅格布局将位于其中的窗口部件放入一个网状的栅格之中。QGridLayout需要将提供给它的空间划分成的行和列,并把每个窗口部件插入并管理到正确的单元格。 栅格布局是这样工作的:它计算了位于其中的空间,然后将它们合理的划分成若干个行(row)和列(column),并把每个由它管理的窗口部件放置在合适的单元之中,这里所指的单元(ce转载 2016-12-07 15:17:36 · 1180 阅读 · 0 评论 -
嵌入式Qt之QWidget的无边框显示
一、在Qwidget类的构造器内进行以下设置 setWindowFlags(Qt::FramelessWindowHint);原创 2016-12-07 17:14:49 · 3176 阅读 · 0 评论 -
Qt之QStackedWidget和QStackedLayout
一、QStackedLayout类 QStackedLayout类可以对一组子窗口部件进行摆放,或者对它们进行“分页”,而且一次只显示其中一个,而把其他的子窗口部件或者分页都隐藏起来,QStackedLayout本身并不可见。分页是从0开始编号的。要使某个特定的子窗口部件可见,可以用一个页号来调用setCurrentIndex()。使用indexOf()可以获取子窗口部件的页号。这里给出部分实例代原创 2016-12-07 17:06:07 · 3971 阅读 · 1 评论 -
QT/E中的字体
QT/E(Qt for Embedded)使用FreeType 2字体引擎来支持字体显示。比如TrueType(ttf),Postscript Type(PFA/PFB),Bitmap Distrubution Format fonts(BDF)等。同时QT/E自己还支持Qt Prerendered Font(QPF)字体,是一种位图字体,不可缩放,作为QTE的本地字体。TrueType是由苹果和微原创 2016-12-06 14:21:55 · 837 阅读 · 0 评论 -
LTIB(Linux Target Image Builder)
一、背景 由于linux开源世界太多软件版本不断升级,相互兼容极差,不同的软件由不同的志愿者维护,互相根本没有考虑到兼容性,这导致在嵌入式linux上开发的工程师的噩梦。在这种情况下,少数高人干起整合这些乱七八糟开源软件的事情,目标当然是尽量提供一个方便使用的软件包,避免那些琐碎繁杂的配置安装工作。这样便产生了两个比较突出的开发包。LTIB(Linux Target Image B原创 2016-12-20 09:12:41 · 520 阅读 · 0 评论 -
NEON----ARM通用 SIMD 引擎
一、NEON1、简介 NEON是适用于ARM Cortex-A系列处理器的一种128位SIMD(Single Instruction, Multiple Data,单指令、多数据)扩展结构。ARM® NEON™ 通用 SIMD 引擎可有效处理当前和将来的多媒体格式,从而改善用户体验。 NEON 技术可加速多媒体和信号处理算法(如视频编码/解码、2D/3D 图形、游戏、音频和语音处理、图像处理技术原创 2016-12-20 11:28:46 · 2471 阅读 · 0 评论 -
BusyBox---- Linux 工具里的瑞士军刀
一、简介BusyBox 是一个集成了一百多个最常用linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android原创 2016-12-20 13:46:18 · 2490 阅读 · 0 评论 -
Linux下编译LTIB时找不到zlib的解决办法
一、问题一 最近在使用基于ARM Cortex-A9内核的飞思卡尔i.MX6Q四核处理器开发一款产品,在ubuntu 12.04上编译LTIB时遇到了找不到zlib的问题(在此之前已经安装了必须的各种库文件)。错误信息如下:ltib cannot be run because one or more of the host packages needed to run it are either原创 2016-12-20 16:29:10 · 977 阅读 · 0 评论 -
视频压缩中的I帧、P帧、B帧
视频压缩中,每帧代表一幅静止的图像。而在实际压缩时,会采取各种算法减少数据的容量,其中IPB就是最常见的。简单地说,I帧是关键帧,属于帧内压缩。就是和AVI的压缩是一样的。 P是向前搜索的意思。B是双向搜索。他们都是基于I帧来压缩数据。I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用转载 2017-02-05 08:48:32 · 1239 阅读 · 0 评论 -
CMake
一、百度百科 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefi原创 2017-02-16 14:30:38 · 219 阅读 · 0 评论 -
CMake之交叉编译
一、引言 很多时候,我们在开发的时候是面对嵌入式平台,因此由于资源的限制需要用到相关的交叉编译。即在你host宿主机上要生成target目标机的程序。里面牵扯到相关头文件的切换和编译器的选择以及环境变量的改变等,我今天仅仅简单介绍下相关CMake在面对交叉编译的时候,需要做的一些准备工作。二、CMake交叉编译配置CMake给交叉编译预留了一个很好的变量即CMAKE_TOOLCHAIN_FILE,转载 2017-07-20 18:44:26 · 1246 阅读 · 0 评论