嵌入式
文章平均质量分 52
colorfulshark
目前在研究嵌入式Linux,希望能结识志同道合的朋友
展开
-
【全志A33】解决文件系统错误
这个平板第一次开机就给我了一个惊喜,文件系统不可写,WTF,这还玩啥。但是查了一下内核日志,发现这事不简单~~~内核日志[ 1.690765] EXT4-fs (nandd): barriers disabled[ 1.698331] EXT4-fs (nandd): mounted filesystem with ordered data mode. Opt...原创 2018-05-05 16:11:20 · 3441 阅读 · 2 评论 -
【ARM】Ubuntu下使用eclipse创建交叉编译项目
交叉编译项目中最重要的就是交叉编译工具链和Make环境的设置,因为eclipse的设置项非常多,所以本片教程旨在快速建立交叉编译项目。 注意:eclipse需要安装CDT插件新建C工程Project name是你的工程的名称;Project type选择Excutable下的Empty Project;Toolchains必须选择Cross GCC下一步可以直接保持默认。这一步非常重要原创 2017-07-28 15:41:57 · 6166 阅读 · 0 评论 -
【Linux内核】Ubuntu下printk函数无法在终端显示
在Ubuntu下使用insmod安装模块的时候,发现预设的调试信息并没有输出,但是使用dmesg命令可以看到在日志中确实有调试信息,下面分析一下可能的情况。printk信息的输出去向这是在内核的命令行参数console=ttyXXX里指定死了,比如console=tty1表示printk的信息输出到终端1。如果是这种情况,你需要使用Ctrl+Alt+(F1-F6)来切换终端。日志输出级别过低用pr原创 2017-06-28 09:16:42 · 4110 阅读 · 1 评论 -
【面试】小米公司嵌入式职位面试经验
面试得很广,从硬件、软件、基础知识、简历内容都有涉及。整个面试持续了将近三个小时,由三位面试官轮流来问,分别偏重硬件、软件、以及综合,但总的来说还是围绕简历和基础知识来问的。第一位面试官面的比较偏重硬件,分别问了:数据传输的时候如果上下升延双倍速率采集数字信号的话,如果有一个边沿正好采集到数字跳 变时怎么办(我回答是从布局布线、建立保持时间以及FPGA的引脚约束相关方面来回答的);模电中的运放,转载 2017-06-29 08:45:51 · 9732 阅读 · 3 评论 -
【OpenCV】为树莓派(ARM)交叉编译OpenCV
之前都是直接在树莓派上从源码编译OpenCV,但是速度太感人,而且也不符合嵌入式开发的真实场景,并不是所有的嵌入式设备都有树莓派这么多的硬件资源的,得益于树莓派官方提供的交叉编译工具链,我们可以在自己的电脑中为树莓派交叉编译OpenCV,所以本着学习的态度,就再重新编译一遍OpenCV安装依赖环境```sudo apt-get updatesudo apt-get install build-原创 2017-04-23 20:17:17 · 8411 阅读 · 2 评论 -
【Java】IO进程
IOIO: 输入输出 — 写/读文件 (1)java里IO操作最多的对象 (2)java.io.File类封装了文件对象File类File对象代表一个路径下的文件或文件夹File类创建 绝对路基 File f1 =new File("C:\qin.txt");相对路径 File f2 =new File("qin.txt");拼接路径 File f3 =new File("C原创 2017-04-23 11:18:12 · 338 阅读 · 0 评论 -
【Java】面向对象
面向对象三大特征面向对象的语言的三大特征封装 继承多态封装封装的含义封:把东西隐藏起来,java中把成员变量隐藏起来,通过方法提供访问成员变量的访问方式。(set和get方法)装:给外界提供统一的访问方式。 (成员变量和方法都放在类里。)‘java封装的实现把所有成员变量都定义成 private类型 (只有该类中的能直接访问成员变量)实现成员变量的set和get方法。所有一句话,就是把原创 2017-04-23 09:38:12 · 311 阅读 · 0 评论 -
【IO进程】设置进程调度策略(实时进程)
如果你使用Linux而不是裸机来控制GPIO与传感器通信,你可能会遇到时序乱掉的情况,这是因为传感器的发送时序间隙是微秒级,而Linux作为一个非实时的多任务系统,如果你的进程时间片用完,那么就会被调度出去等待其它进程运行,这样我们就没有办法精确操控时间,如果错过了某段电平,就可能会读出错误的数据甚至整个程序陷入死循环,为了能让一个进程不被打断的运行完,需要设置一下进程的优先级。APIsched_原创 2017-04-16 11:08:18 · 1609 阅读 · 0 评论 -
【Java】基本语法
命名规则C语言是匈牙利命名法 java的命名法 常用的 例如 mystudentname 小驼峰命名法 myStudentName 大驼峰命名法 MyStudentName 下划线命名法 my_student_name原创 2017-04-19 18:44:08 · 355 阅读 · 0 评论 -
【Java】简介
Java属性java :是一种面向对象的跨平台语言。 (c:是一种面向过程的不跨平台的语言)Java技术体系架构JAVA SE(java标准版):做桌面级的开发,就是咱们java语言核心。 JACA EE(java企业版):做企业级的高并发的项目开发 JAVA ME(java移动版):做嵌入式开发java的跨平台特性(1)计算机的高级编程语言类型分为编译型和解释性1–编译型:c原创 2017-04-17 20:06:26 · 502 阅读 · 0 评论 -
【Linux网络编程】SQLite3 数据库编程
SQLite3并没有提供man手册版的API文档,但是官网有API文档。安装sudo apt-get install sqlite3sudo apt-get install libsqlite3-dev在Shell中使用创建数据库文件sqlite3 db_name.db显示所有命令.help退出sqlite3.quit显示当前打开的数据库文件.database显示数据库中所有表名.tables原创 2017-04-14 11:35:40 · 735 阅读 · 0 评论 -
【Linux网络编程】广播、组播与本地网络通信
广播广播实现的是1对多的情况,有一个发送端多个接收端【注意】 1、广播只能在局域网中转发,默认的路由器一般不支持数据在外网转发。 2、采用的是UDP协议发送端编程流程1、设置通信标准2、设置网络信息结构体 【注意】 要制定广播地址(不能是自己的IP地址)3、设置套接字属性,具有广播功能,在使用setsockopt时,第四个参数指定整形数据,并且是非0值,才会有效,如果为0,则无效。4、发送数据原创 2017-04-12 20:40:14 · 973 阅读 · 0 评论 -
【ARM】Ubuntu下使用Qt Creator创建交叉编译项目
我总是乐忠于尝试各种不同的工具来完成相同的事情,使用不同工具的过程中我能感受到每个开发者不同的思路和设计思想。之前我在eclipse下搭建了交叉编译项目的环境,这次试试在Qt Creator下完成相同的事情。这件事并不是没有任何意义,Qt Creator拥有更小的安装包和更快的运行速度,代码提示功能也比eclipse+CDT更加智能。新建项目因为我们不是要开发一个app,因此Qt Creator原创 2017-07-29 20:40:01 · 5318 阅读 · 1 评论 -
【ARM】Exynos 4412 中断理论分析
中断在计算机体系结构中具有重要的地位。要进行中断编程,首先要清楚发生中断时程序的跳转流程,然后再根据实际的硬件体系结构编程。中断跳转流程首先,中断是异常的一种,因此,中断发生时,Soc实际上是按照异常的标准处理流程来执行的。由于CPU上电之后执行的第一条代码是汇编代码,所以我们需要在汇编程序中完成异常向量表的装载,堆栈的初始化等操作,才能执行C语言的程序。下面是已经启动的系统在中断发生时所执行的操原创 2017-07-31 22:02:37 · 1133 阅读 · 0 评论 -
【ARM】Exynos 4412 中断控制器相关计算
由于引入了GIC,在设置中断控制器的时候不免产生各种计算,各种寄存器编号换算比较繁琐,在此提供一种计算方式。GIC处理中断的流程GIC中由成百上千的寄存器,要理清寄存器的设置思路,必须要理解GIC是如何处理中断源发来的中断信号的。首先,GIC有一个全局开关——ICDDCR。这个寄存器决定了GIC是否会处理外围的中断信号,因此必须先将它打开。中断信号到来后,第一个要面对的是GIC的中断源屏蔽,这原创 2017-08-01 17:53:48 · 1108 阅读 · 0 评论 -
【全志A33】Linux Qt编译环境搭建
之前参加某嵌入式培训机构,送了一个全志A33平台的平板,一开始看到全志平台,其实我是拒绝的 (¬_¬),不过鉴于物尽其用(钱包空空)的原则,还是免为其难的玩耍一番。系统环境Ubuntu 17.10i7 4702mq12G内存500G硬盘# 基本软件环境sudo apt install build-essentialsudo apt install git# ...原创 2018-05-03 21:26:38 · 3457 阅读 · 0 评论 -
【全志A33】在Ubuntu下烧录程序
最近从箱底翻出来一个平板,是当时参加一个培训机构赠(购)送(买)的。不过工作之后就没碰过了,附有完整的Android和LinuxQt的源代码,全志A33平台,还是挺有可玩性,所以就搭建了开发环境,因为给的文档里说是在Windows下进行烧录。但是我使用的纯Linux环境,而且烧写程序无非就是向一个USB设备写数据,不存在系统限制,所以Google到了全志的一个Linux平台烧录工具——Liv...原创 2018-04-30 21:07:41 · 6044 阅读 · 4 评论 -
【Android】NDK的使用常见问题
Android提供了NDK工具用以编译能够Android设备上运行的C/C++程序,本质上就是交叉编译,下面给出几篇关于NDK相关的文章。教程生成设备专用的toolchain在 ${NDKROOT}/build/tools 下有两个脚本:make_standalone_toolchain.py 和 make-standalone-toolchain.sh,这两个脚本的功...原创 2017-12-27 13:22:06 · 2115 阅读 · 1 评论 -
【OpenWrt】使用SDK编译Linux内核驱动
很多路由器都有USB接口,当路由器搭载OpenWrt(LEDE)系统后,理论上可以使用任何USB接口的设备,常见的设备比如各种存储设备、USB网卡等。但是如果内核中没有集成相关的驱动,并且源中也没有提供该设备的kmod,那么就需要自己寻找驱动源码并编译为驱动模块。 OpenWrt官方提供了一套编译系统,使用feed/package模式,但是如果不是专门开发OpenWrt,熟悉这一套开发环境需要原创 2018-01-01 17:01:38 · 5045 阅读 · 1 评论 -
【ARM】控制寄存器的几种方式
定义一个指向寄存器地址的指针原理:利用强制类型转换将寄存器的地址强转为一个指向无符号整形的指针,并将其赋给一个指针变量。之后的操作可以转换为对指针的操作。unsigned int * GPX2CON = (unsigned int *)0x11000c40;* GPX2CON = 0x10000000;利用宏定义原理:与上一种方法原理相同,最终都是对一个指向无符号整形的指针进行操作。不同之处在于强转原创 2017-07-28 18:58:48 · 1857 阅读 · 0 评论 -
【ARM】Ubuntu下使用minicom+ckermit实现串口调试
Windows下有很多好用的串口调试工具,SecureCRT、Putty、超级终端,各个操作简单,功能强大。但是到了Linux下,除了Putty有一个官方的版本,其它的GUI工具都是丑八怪,有的几年都没更新过了。 Ubuntu下的Putty是一个超级简化版,没有文件传输功能,只能作为一个终端用,Pass。 最终选择了拥有较好口碑的minicom,但是民间有个说法:minicom跟u-bo原创 2017-07-28 21:36:33 · 1253 阅读 · 0 评论 -
【ARM】LED实验——eclipse
实验步骤在设备原理图中找到LED的电路:分析电路,可知当CHG_COK为高电平时,LED点亮;当CHG_COK为低电平时,LED熄灭。在核心电路原理图中找到CHG_COK引脚:分析核心板的引脚图,可以知道,CHG_COK由GPX2_7控制,这是一组GPIO引脚中的一个。查询芯片手册中GPX2这一节,可以得知控制GPX2组中GPIO引脚的寄存器地址以及功能定义,如图:编写汇编程序控制寄存器原创 2017-07-28 14:21:52 · 688 阅读 · 0 评论 -
【ARM】基本汇编指令——Keil
area reset, code ; 定义一个代码段叫reset;/*汇编文件中的符号*/ ;1.指令:编译完成后作为一条指令存储在内存单元当中,CPU执行时能完成一定的操作 ;2.伪操作:不会生成代码也不会占用内存,告诉编译器怎样编译 ;3.伪指令:本身不是指令,编译器在编译的时候将其替换成CPU能识别的指令;/*指令*/ ;1.数据操作指令:对数据进行逻辑原创 2017-07-28 13:48:03 · 7829 阅读 · 0 评论 -
【ARM】初识ARM——硬件理论基础
逻辑1和0 :数字电路中用高、低电平来表示逻辑1和0二极管具有单向导电性 :正向导通,反向截止三极管具有开关特性 NPN型:电压方向C->E 基极是高电平时CE导通 PNP型:电压方向E->C 基极是低电平时CE导通电路图如何让查找一个元器件: 搜索丝印通过目录电路图中网络标号相同的节点在电气上是连接在一块的位操作 unsigned int a; a为32位无符号整型 将a原创 2017-07-28 11:19:15 · 706 阅读 · 0 评论 -
【系统移植】基础理论与环境搭建
系统组成windows系统 BIOS(引导系统) windows系统核心 应用程序 驱动 文件系统(程序 就是维护我们自己存储文件)linux系统 bootloader(引导系统) kernel(linux内核) 应用程序 驱动 文件系统开发环境交叉工具链tftp服务器nfs服务器ubuntu系统(命令) linux特点linux系统有硬件限制linux系原创 2017-08-04 22:06:30 · 373 阅读 · 0 评论 -
【ARM】Exynos 4412 IIC(I2C)总线详解
概述Exynos 4412支持四路多主机I2C串行总线,为了使连接总线上主机和外设之间实现数据传输,使用了一条SDA(Serial Data Line)线和一条SCL(Serial Clock Line)线,这两条都支持双向传输。当I2C总线处于多主机模式时,多个Exynos 4412处理器都可以与从设备收发数据。I2C总线上的主设备负责启动和结束一次数据传输。Exynos 4412的I2C总线使用原创 2017-08-02 18:50:08 · 2755 阅读 · 0 评论 -
【Linux网络编程】组播代码
//head.h#include <stdio.h>#include <unistd.h>#include <errno.h>#include <sys/types.h>#include <sys/stat.h>#include <stdlib.h>#include <fcntl.h>#include <strings.h>#include <sys/socket.h>#incl原创 2017-04-12 20:49:08 · 839 阅读 · 1 评论 -
【数据结构】图
【1】定义图(Graph)是一种非线性数据结构任意的两个元素都可能相关,即图中任一元素可以有若干个直接前驱和直接后继,属于网状结构类型。 树是图的特例——有向无环图【2】有向图(Digraph)设 Vi、Vj为图中的两个顶点,若关系< Vi,Vj >存在方向性,称之为有向图,记作< Vi,Vj > ,Vi为弧尾,Vj为弧头【3】无向图(Undigraph)设Vi、Vj为图中的两个顶点,若关系原创 2017-03-27 09:18:31 · 381 阅读 · 0 评论 -
【数据结构】树和二叉树
【1】树的概念树(Tree)是n(n≥0)个节点的有限集合T,它满足两个条件 :有且仅有一个特定的称为根(Root)的节点;其余的节点可以分为m(m≥0)个互不相交的有限集合T1、T2、……、Tm,其中每一个集合又是一棵树,并称为其根的子树(Subtree)。【3】度数一个节点的子树的个数称为该节点的度数,一棵树的度数是指该树中节点的最大度数。【4】路径一个节点系列k1,k2, ……,ki原创 2017-03-27 08:28:01 · 331 阅读 · 0 评论 -
【Linux网络编程】基本概念
网络体系结构OSI模型TCP/IP协议的产生来源有OSI模型 OSI:是由国际标准化组织(ISO)提出的网络通信的模型 采用了分层的思想 网络层 功能 应用层 具体功能 表示层 规定常用的数据格式,文字、视频、图片 会话层 帮助用户程序建立连接过程、取消连接 的过程 传输层 传输层用来传输数据,保证数据能够有序进行,如果数据不正常,可能进行数据的重发,传输数原创 2017-04-07 19:27:40 · 370 阅读 · 0 评论 -
【IO进程】标准IO
IO针对文件来进行操作, 在linux系统当中几乎所有东西被看做是一个文件来处理文件: 一部分功能就是用来对数据进行存储,常用的文本数据、还有二进制数据 特殊文件是帮助用户站到内存中某一个对象,或者找到对应的设备文件文件的名字: 类型: bcd-lsp 类型 符号 作用 常规文件 - 它用来存储文本数据、还有二进制数据 设备文件 bc 对硬件原创 2017-03-27 19:21:07 · 750 阅读 · 0 评论 -
【IO进程】文件IO
【1】文件IO必须使用操作系统提供输入输出函数来实现文件的读写、定位操作,不能在其他的系统中使用。 文件描述符: 实际上是一个非负的整形数据,文件指针是文件描述的一个软连接 最大数据:0 ~ 1023 打开得文件袋描述符的个数是1024个 无缓冲: 文件IO对比标准IO:标准IO通过对常规文件进行操作,文件IO通常对特殊文件记性操作;文件IO也可以对常规文件原创 2017-03-29 12:55:49 · 794 阅读 · 0 评论 -
【数据结构】链表
【1】线性表的顺序存储结构有存储密度高及能够随机存取等优点,但存在以下不足: (1)要求系统提供一片较大的连续存储空间。 (2)插入、删除等运算耗时,且存在元素在存储器中成片移动的现象;【2】线性表的链式存储(单链表)的实现#include <stdio.h>#include <stdlib.h>typedef int datatype_t;struct node{ d原创 2017-03-20 20:21:35 · 398 阅读 · 0 评论 -
【数据结构】线性表
【1】定义 线性表是信息表的一种形式,表中数据元素之间满足线性关系(或线性结构), 是一种最基本、最简单的数据结构类型。【2】线性表的特征: 1) 对非空表,a0是表头,无前驱; 2) an-1是表尾,无后继; 3) 其它的每个元素ai有且仅有一个直接前驱(ai-1)和一个直接后继(ai+1)。【3】线性表的顺序存储(顺序表)的实现#include <stdio.原创 2017-03-20 20:17:01 · 323 阅读 · 0 评论 -
【数据结构】基本概念
【1】数据结构的概念 数据和数据之间的关系,本质上说主要研究的是关系【2】数据(Data) 数据即信息的载体,是能够输入到计算机中并且能被计算机识别、存储和处理的符号总称。 一般数据可以理解为研究对【3】数据元素(Data Element) 数据元素是数据的基本单位,又称之为记录(Record)。【4】数据项 数据元素由若干基本项(或称字段、域、属性)组成,称之为数据原创 2017-03-20 20:10:52 · 757 阅读 · 0 评论 -
关于Ubuntu编译Qt失败问题
这两天被Qt折腾疯了,由于使用的嵌入式开发平台对Qt版本有限制,因此只能通过编译源码安装,然而第五次编译依然失败。。。我遇到了各种奇怪的问题,比如数据类型错误,括号错误,强制转换错误,我甚至手工更改cpp文件,但都是解决了这个问题又出现新的问题,逼到绝路的我只能使用厂家提供的Fedora 8,这下可好,一次编译成功,然后好奇的我又去搜索了一下Ubuntu,Fedora哪个更适合做嵌入式开发,结果发原创 2016-12-31 21:00:14 · 1694 阅读 · 2 评论 -
nfs server not responding still trying解决方案
从嵌入式设备上读取nfs目录的文件,每次尝试读取都会显示nfs server not responding still trying,但是连接正常,目录也能正常读取,仔细看了一下指导书上的命令,得到解决方案。在mount 后面加上-o rsize=4096,wsize=4096,比如mount -t nfs -o nolock,rsize=4096,wsize=4096 192.168.199.2原创 2016-12-30 22:38:15 · 727 阅读 · 0 评论 -
mount 错误 “RPC: failed to contact local rpcbind server (errno 5)
在博创的S2440平台上挂载NFS时报的错,其实是自己偷懒,没有按照手册上的指令执行。只需要在执行mount的时候加上 -o nolock选项即可,如mount -t nfs -o nolock 192.168.199.2:/home/ryan/armlinux ~/armlinux原创 2016-12-30 22:28:03 · 504 阅读 · 0 评论 -
ubuntu 16.10 搭建s3c 2440平台交叉编译工具链
本次选择的嵌入式开发平台为博创公司的UP-CUP S2440平台,随书光盘中可以找到提供的交叉编译链arm-linux-gcc-3.4.6-glibc-2.3.6.tar.bz2 ,由于书中介绍的Linux发行版为Fedora,而我使用的是Ubuntu,因此书中的安装脚本我并不能使用,必须手动安装。具体步骤复制交叉编译链的包到Ubuntu中,这里我复制到了桌面上。解压压缩包到 /usr/loc原创 2016-12-29 23:22:23 · 1432 阅读 · 0 评论 -
编译QtE出现qbytearray.cpp:52:18: fatal error: zlib.h: No such file or directory
这个QtE的编译简直能用恶心来形容,期间出的问题够我写一本书了。。。这是一个比较基础的问题,一般遇到xxx.h不存在,可以尝试在终端输入 sudo apt-get install xxx ,然后按两下tab,看有没有相应的软件可以安装,基本就能解决问题。 针对这个问题,输入sudo apt-get install zlib1g-dev 即可解决问题。原创 2017-01-06 20:43:53 · 3220 阅读 · 0 评论