
嵌入式|Linux|ARM
KayChanGeek
情愫竟短暂 犹如骚人墨客笔下的烟花 风不停留 何苦绕来摇晃灯火
展开
-
uboot - 主Makefile分析【1】
首先,进入uboot工程的的根目录下有个Makefile文件,打开它。第一部分是一些作者信息和版权信息。致敬作者3秒钟后,忽略不计。。。HOSTARCH:主机架构,就是你当前运行shell命令uname -m时的电脑的CPU架构,比如我的现在运行于Intel的架构下打印的便是i686如图:| 的意思是管道 就是说吧命令uname -m执行后的输出作为s原创 2015-11-17 23:55:20 · 976 阅读 · 0 评论 -
OpenCV移植到ARM全过程-I
很早之前(上大学的时候)就想将opencv移植到ARM板子上玩一玩,可惜一直没去试,因为感觉挺复杂的,最近有移植的需求,就在网络上百度了一番,发现大部分移植笔记都比较混乱,每个人都不一样,而且都是比较古老的(ARM9、ARM11、opencv1.0、opencv2.x等等)。所以我想自己从头都到尾的移植一遍,一步步的记录下移植过程! 前言 这里选择Ope...原创 2017-11-15 19:37:37 · 11808 阅读 · 7 评论 -
使用source命令的时候提示source: command not found错误解决
今天在/root/.bashrc下修改环境变量后要立即生效使用source /root/.bashrc,这时候会提示权限不足,所以加上root权限sudo source /root/.bashrc,但是这时候提示source: command not found。 有两种方法解决此问题: 1.在当前用户下添加环境变量:将环境变量添加到文件:~/.bashrc下,原创 2017-11-14 20:09:37 · 56014 阅读 · 5 评论 -
Linux共享内存(顺便求解惑)
最近使用多进程共享内存来实现将图像处理算法进行模块化的功能,每个处理算法对应一个进程,他们之间的数据传输通过共享内存实现,比如简单的3个图像处理预处理算法:灰度化,滤波,二值化。我们就写3个CPP文件灰度化.cpp,滤波.cpp,二值化.cpp,然后编译成灰度化.exe,滤波.exe,二值化.exe3个图像处理模块。 其运行过程大致解释为: 1.灰度化.exe模块原创 2017-11-02 19:20:22 · 566 阅读 · 0 评论 -
/etc/ld.so.conf文件
Linux 共享库 Linux 系统上有两类根本不同的 Linux 可执行程序。第一类是静态链接的可执行程序。静态可执行程序包含执行所需的所有函数 — 换句话说,它们是“完整的”。因为这一原因,静态可执行程序不依赖任何外部库就可以运行。第二类是动态链接的可执行程序。 静态可执行程序与动态可执行程序比较 我们可以用 ldd 命令来确定某一特定可执行程序是否为静转载 2017-11-02 16:24:53 · 1625 阅读 · 0 评论 -
/bin/bash^M: 坏的解释器: 没有那个文件或目录
在Windows环境下编写shell脚本 通过共享文件在linux环境下运行时会出现这个问题 如下图:这是为什么呢 因为在Windows环境下我们回车时 是 \n\r而在linux环境下 回车 是 \n所以会多了一个 \r 而这个 \r 在这里的体现就是 ^M不信 你可以 输入命令 cat filename -A 就会在每一句的末尾打印出 ^M 这个符号 就是换行那怎原创 2017-06-08 20:21:43 · 1404 阅读 · 0 评论 -
系统调用实现Linux命令 cp
和命令ls一样,我以前在网易上写的搬过来,嘻嘻!cp.c如下:#include "cp.h"//注意:计算完文件大小后 要记得指针复位//记得关闭文件void cp(char src_path_filename[],char dest_path_filename[]){ /*查看源文件是否可读 F_OK是否存在*/ if(-1 == access(src_path_fil原创 2017-06-08 20:17:14 · 2333 阅读 · 1 评论 -
系统调用实现Linux命令 ls -al
二话不说直接上代码(这是我之前在网易博客上写的搬过来)ls.c 如下:#include "ls.h"/**********************************************************************///将路径定位到argv[1]目录下 打开该目录 返回指针指向该文件//读取文件 每读取一次文件目录下的指针方向后移 并返回文件属性结原创 2017-06-08 20:10:19 · 3073 阅读 · 2 评论 -
Linux内核-menuconfig和kconfig和.config的关系
配置内核的时候,我们会先执行make xxx_defconfig,这个过程,其实就是从arch/arm/configs/下面把xxx_defconfig复制到源码根目录下的.config。然后你才能make menuconfig。menuconfig就是一个Linux下的软件,他只提供接口。当你执行make menuconfig的时候,首先,这家伙会先去各个目录下寻找Kconfig原创 2016-01-20 20:03:28 · 1748 阅读 · 0 评论 -
Linux内核-源码目录结构分析
我们拿到一个Linux内核源码后,必先熟悉其目录大概的结构。其目录结构图如下所示:arch:这个为目录是架构相关,里面存放了许多CPU架构,比如arm,x86,MIPS,PPC等,block:在linux中block表示块设备(以块(多个字节组成的整体,类似于扇区)为单位来整体访问),譬如说SD卡、iNand、Nand、硬盘等都是块设备。你几乎可以认为块设备就是存储设备原创 2016-01-19 17:49:01 · 6596 阅读 · 2 评论 -
Qt移植到ARM64-v8平台(NXP i.MX8M)笔记
前言 网上有一堆Qt移植到嵌入式linux的教程,但是目标机器基本都是32bit的较老的机型(ARM9/ARM11/CortexA8/A9)。现在目标机器跑的是64bit的Linux(飞思卡尔(已经被NXP收购)i.MX8M:4*Cortex-A53 + 1*Cortex-M4)。我原本以为就算它是64bit的linux系统应该是可以兼容32bit的应用程序的,然不,我也成功编译出32b...原创 2018-05-09 21:22:42 · 10183 阅读 · 5 评论 -
Dlib+OpenCV交叉编译移植到ARM64-v8平台
系统环境ubuntu16.04 + dlib + opencv320 + qt560 准备资源 1、Dlib源码 - https://github.com/davisking/dlib2、OpenCV源码(这里使用OpenCV320) - https://www.opencv.org/releases.html3、CMake3.5.1 - sudo apt-get...原创 2018-05-18 15:50:42 · 9625 阅读 · 12 评论 -
OpenCV移植到ARM-Linux(Exynos4412)全过程
目录 OpenCV移植到ARM全过程-I OpenCV移植到ARM全过程-II OpenCV移植到ARM全过程-III OpenCV移植到ARM全过程-IV 友情连接 OpenCV移植到ARM64-v8平台 技术交流 图像处理-深度学习技术交流群:qq群:247270428 如果文章对您有帮助,打...原创 2018-04-27 20:58:38 · 9477 阅读 · 12 评论 -
Unix版权史
1.这几天,我在读《Unix编程艺术》。书中介绍了Unix的发展历史。我发现,这是一个很好的例子,说明现行版权制度具有阻碍社会发展的负面作用。2.Unix诞生于1969年,是贝尔实验室员工Ken Thompson的个人项目。由于贝尔实验室是AT&T(美国电话电报公司)的下属机构,所以Unix的版权归AT&T所有。AT&T垄断了美国长途电话业务,所以美国司法部在1958年与它...转载 2018-05-16 19:24:34 · 819 阅读 · 0 评论 -
RTSP音视频传输频笔记
《音视频应用开发系列文章目录》RTSP在音视频传输中的位置RTSP协议是一个应用层协议,主要针对媒体流传输过程的控制和配置,提供OPTIONS,DESCRIBE,SETUP,TEARDOWN,PLAY,GET_PARAMETER,SET_PARAMETER等操作命令。下图是客户端请求rtsp服务器音视频数据的大致过程client通过RTSP协议对远程服务器发起连接请求,连接成功...原创 2019-09-25 20:17:03 · 3793 阅读 · 3 评论 -
RTP载荷AAC音频
《音视频应用开发系列文章目录》编码RTP over AAC的大致过程1.添加RTP12字节的头2.如果AAC有ADTS头,则跳过7字节的data3.添加4字节的AU_HEAD 字节1:0x00 字节2:0x10 字节3:(data_len & 0x1fe0) >> 5 字节4:(data_len & 0x1f) << ...原创 2019-10-09 20:04:32 · 1788 阅读 · 0 评论 -
RTP载荷H264视频
《音视频应用开发系列文章目录》编码RTP over H264的大致过程1.判断H264的NALU数据大小和MTU(Maximum Transmission Unit[normal 1500bytes])的关系 小于MTU:发送整个NALU大于MTU:分片发送NALU2.添加RTP12字节的头3.case小于MTU:添加payload(NALU数据)4.case大于...原创 2019-10-10 19:23:56 · 549 阅读 · 0 评论 -
RTP载荷G711A/G711U/PCM/G726音频
《音视频应用开发系列文章目录》编码RTP over G711A/G711U/PCM音频的大致过程1.添加RTP12字节的头2.添加payload(G711A/G711U/PCM/G726的真实数据)RTP打包图伪代码void rtp_send_g711(char *data, int len){ char buf[MTU]; // fix buf[0~11] ...原创 2019-10-10 19:55:42 · 4524 阅读 · 1 评论 -
OpenCV移植到ARM全过程-II
在上一篇里面,我们已经下载好了opencv源码,安装好了arm-linux交叉编译器和cmake,接下来就是要利用交叉编译器来编译opencv源码了,但是在这之前,我们要先交叉编译opencv的第三方依赖库。(注:为了方便安装,建议切换到root用户下)。 解压opencv源码 在/opt下创建目录arm,将opencv源码放到/opt/arm下,进入/...原创 2017-11-16 15:37:51 · 8866 阅读 · 10 评论 -
配置Linux内核支持NFS服务
进入Linux内核源码,配置好.config后,命令行下输入make menuconfig进入内核配置界面,可能会出现以下失败信息:安装对应的库即可解决,apt-get install libncurses5-dev:再次make menuconfig成功出现以下界面:选中Networking support,回车,如下图:选中IP: k原创 2017-11-29 19:58:30 · 8799 阅读 · 0 评论 -
uboot - 主Makefile分析【2】
该段makefile实现了静默编译功能$(findstring s,$(MAKEFLAGS))解析1 将s加入到MAKEFLAGS下2 在命令行敲入make -s的时候 $(findstring s,$(MAKEFLAGS)) 这个值就不为空 条件就不成立会执行else分支 XECHO = :不打印内容3 如果条件成立的话,会执行if分支XECHO = echo打印出makefil原创 2015-11-18 01:27:52 · 693 阅读 · 0 评论 -
uboot - 主Makefile分析【3】
一、首先分析三个在Makefile中定义的变量:(1)OBJTREE:就是编译输出.o文件的根目录,在默认编译下就是当前的目录,就是主makefile存在的目录 如果是用O=xxx编译的 那么OBJTREE就是指定的输出目录xxx(2)SRCTREE:源码目录,就是源代码的根目录,也就是当前目录。在默认情况下OBJTREE = SRCTREE,在O=xxx指定输出目录的编译下就原创 2015-11-18 03:39:09 · 714 阅读 · 0 评论 -
uboot - 主Makefile分析【4】
===主要分析主makefile的调用的makefile -> config.mk文件 ===调用uboot根目录下的config.mk进行编译:注意:在include目录下也有个config.mk文件(该文件是在配置后生成的 make NAME_config),而根目录下的config.mk是本来就有的。是用于主makefile调用的在根目录下的conf原创 2015-11-22 01:37:40 · 710 阅读 · 0 评论 -
uboot - 主Makefile分析【5】
===主makefile的主体分析===可以看到 这里就是核心部分了 就是指定bin文件的生成过程和其他目标文件的生成过程:和我们的裸机一样的道理 这边比较大型而已。可以在make后的uboot目录下看到上面的某些目标文件。如图:OK。makefile分析到这里足矣!makefile只是个工具而已 没必要去具体的一个字一个字的分析。我们只是需要知道他是怎么管原创 2015-11-22 03:25:14 · 523 阅读 · 0 评论 -
uboot - 配置过程
===分析uboot的配置过程(mkconfig脚本)===uboot怎么配置?我们在终端上执行make NAME_config时的运行过程解析!我们执行make x210_sd_config时会运行makefile的这两行程序,先分析下第二行:echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/x210/config.mk原创 2015-11-22 05:30:31 · 894 阅读 · 0 评论 -
uboot - 启动流程分析【第一阶段】
**进入uboot/cpu/s5pc11x/start.S:(1)构建异常向量表(2)设置CPU工作在SVC模式,ARM状态,禁止FIQ IRQ。**在SRAM设置栈并进入uboot/board/samsuang/具体开发板名字/lowlevel_init.S:(注,为什么要设置栈,因为在lowlevel_init.S中还要调用别的函数,而LR只有一个)(4)检查复位状原创 2015-11-25 05:48:26 · 1569 阅读 · 0 评论 -
uboot - 启动流程分析【第二阶段】
**uboot/lib_arm/board.cvoid start_armboot (void)这个函数开始运行uboot启动的第二部分(1)在内存中规划uboot的分配结构,堆区,栈区,gd,bd等。分配过程图解请看我写的《uboot 运行过程中的存储分布图解》(2)接下来进入一些列的必要的外设初始化通过遍历函数指针数组里面的成员进行初始化各个函数,初始化成功,返回0,原创 2015-11-25 06:34:17 · 2530 阅读 · 0 评论 -
uboot 运行过程中的存储分布图解
(1)上电后,从SD自拷贝8KBuboot到SRAM中运行(uboot的第一阶段)(2)uboot被重定位到DDR,并指定栈,并跳到DDR中开始运行第二阶段(3)填充gd,bd,设置 堆 栈原创 2015-11-25 07:15:39 · 1881 阅读 · 0 评论 -
MMU段式映射(VA -> PA)过程分析
MMU:内存管理单元。CPU寻址的方式:未使用MMU:CPU发出地址(PA) 直接内存寻址(SDRAM or DDRx)。使用MMU :CPU发出地址(VA) MMU接收CPU发来的地址 经过某种转换变成实际的物理地址去寻址。那么是MMU是如何实现VA到PA的转化的呢? 建立VA与PA的对应关系:MMU有段描述符(1M)(还有页描述符大页(64KB)小页(4K原创 2015-11-26 04:09:43 · 3725 阅读 · 0 评论 -
uboot - 启动内核过程分析
我们都知道u-boot被缔造出来的使命是 启动内核。那么,他是如何完成他的使命的涅!请看下面↓↓↓···(1)我们先来分析下Linux内核镜像这个概念吧。我们编译内核完(编译成功)会生成vmlinux,Image,zImage,再通过uboot提供的工具mkimage,执行make uImage会生成uImage,那么他们谁是内核镜像。如下图为这3个东东:vmlinux原创 2015-11-29 22:57:28 · 4387 阅读 · 0 评论 -
uboot移植-从uboot官方源码开始移植过程总结
1 选取源码 下载源码 解压源码自行登录uboot官网,下载uboot源码,我选取的是2013.10的,因为之后的源码采用类似新的配置模式(能用即可)。我的源码是uboot-2013.10,解压缩一份在windows(用来查看分析和修改),一份在Linux(用来交叉编译)。2 寻找目标板子uboot工程里面有很多开发板,我们要找到一个和我们类似SOC的开发板,很显然最起码要匹配两个原创 2016-01-16 16:08:40 · 17043 阅读 · 0 评论 -
uboot移植-从三星官方源码开始移植过程总结
待续···原创 2016-01-19 16:33:50 · 1266 阅读 · 0 评论 -
ZigBee多机双向通信编程方法【星形网络】
ZigBee星形网络组网通信原创 2015-11-02 03:16:33 · 2431 阅读 · 0 评论 -
ZBar移植到ARM
之前在《 OpenCV+ZBar实现条码识别(Windows32位和64位)》介绍过ZBar在Windows上实现条码的识别,现在介绍如何将ZBar在ARM架构的嵌入式Linux系统上实现条码识别。1、下载ZBar源码(传送门)2、交叉编译源码解压缩源码:tar -jxvf zbar-0.10.tar.bz2进入ZBar源码根目录,在根目录下建立output文件夹:cd z原创 2017-12-09 14:40:56 · 7168 阅读 · 3 评论 -
/lib/ld-linux.so.3和/lib/ld-linux-armhf.so.3和程序not found解决方案
Ubuntu编写好一个C应用程序后,通过交叉编译后搞到ARM板子上运行,但是一运行发现系统提示not found!如下: 但是查看程序属性,是可执行的啊,为嘛会报not found? 于是进入主机Ubuntu利用file命令查看一下文件信息如下: 然后在查看一下其他已经可以在ARM上运行的程序的文件信息,看看有什么区别,原创 2017-12-08 15:11:24 · 16736 阅读 · 3 评论 -
OpenCV移植到ARM全过程-IV
经过一系列的准备工作,接下来就将opencv应用程序在arm板子上跑起来。 启动板子进入Linux系统,首先将上一步交叉编译输出的opencv库拷贝到板子的/lib目录下,可以通过U盘,TF卡等外接设备挂载拷入,但这个拔来拔去辣是相当的麻烦!还是通过NFS服务共享来的快,这边通过NFS挂载来拷贝(注:要支持NFS服务,不但需要在Ubuntu上安装NFS服务器,安装过程...原创 2017-11-30 10:53:14 · 7623 阅读 · 25 评论 -
OpenCV移植到ARM全过程-III
在上一篇文章里面我们已经交叉编译好了opencv的第三方依赖库,并且解压好了opencv源码。现在开始正式的交叉编译opencv源码。 进入opencv源码目录下,上一篇在源码的的根目录下建立了2个文件夹build和output,进入build目录下。 cd build 运行cmake的GUI程序,在命令行下输入cmake-gui然后按照下...原创 2017-11-16 16:57:48 · 15223 阅读 · 21 评论 -
海思音频开发
《音视频应用开发系列文章目录》海思音频文档原始音频信号以模拟信号的形式给出后,通过 Audio Codec,按一定采样率和采样精度转换为数字信号。 Audio Codec 以 I2S 时序或 PCM 时序的方式,将数字信号传输给 AI设备。芯片利用 DMA 将 AI 设备中的音频数据搬移到内存中,完成录音操作。播放和录音是基于同样的原理。芯片利用 DMA 将内存中的数据传输到 AO 设备。...原创 2019-10-10 20:32:51 · 1688 阅读 · 0 评论