- 博客(35)
- 资源 (229)
- 问答 (2)
- 收藏
- 关注
原创 android JNI 错误“Cannot load library: soinfo_relocate”
最近Android通过JNI读写串口的时候,调用JNI方法的时候报如下错误:java.lang.UnsatisfiedLinkError: Cannot load library: soinfo_relocate(linker.cpp:975): cannot locate symbol "tcgetattr" referenced by "xxxxx.so"原因:我用的最新A
2016-11-29 12:57:46 1921 2
原创 Linux设备驱动第五天(按键驱动、中断)
回顾: 问题1:简单主设备号、次设备号的用途? 问题2: “mknod /dev/test c 204 64” 这些参数的意义 问题3: 向内核注册一个cdev的编程步骤 问题4:内核空间和用户空间能直接访问吗?如果不能,内核中提供的访问接口有哪些?LED驱动程序 自动创建设备文件: class_create(…); device_create(…);1、按键驱
2016-11-27 11:29:00 772
原创 Linux设备驱动第四天(自动创建设备节点、LED驱动程序)
回顾: 与驱动有关的几个重要结构体 1,struct cdev //从软件上代表硬件设备 { dev_t dev;//设备号 = 主设备号+次设备号 struct file_operations f_ops; }2,struct file_operations{ open read write release
2016-11-26 23:01:45 2295
原创 Linux设备驱动第三天(字符设备驱动、cdev)
设备号的分配 静态分配:动态分配:/*** 功能:动态申请设备号* dev:存放返回的设备号的结构体 * firstminor:指定次设备号 * count:连续编号范围* name:编号相关联的设备名称. (/proc/devices)**/int alloc_chrdev_region(dev_t *dev,unsigned int firstminor,unsigned int
2016-11-25 22:23:45 694
原创 Linux设备驱动第二天(数组参数传递,模块相互调用、printk、内核GPIO函数、系统调用)
数据的模块参数声明:/*** 宏的作用:对数组进行模块参数声明,将来可以进行传递一些参数信息进来* name:数组名* type:数组元素的数据类型* nump:有效数组元素个数的指针* 比如定义一个数组的时候,可能只想操作数据中的某些数据* perm:访问权限 跟之前的一样**/module_param_array(name,type,nump,perm);例如:stat
2016-11-25 11:47:14 1981
原创 Linux设备驱动第一天学习笔记(如何将系统在开发板上运行起来、驱动开发基本步骤)
如何将系统在开发板上运行起来? 4.0 交叉编译器的获取?厂家提供 网上下载(厂家确认) 4.1 uboot进行操作? 1,解压厂家源码 2,进入源码 3,make distclean 彻底删除源码的目标、临时文件 4,make xxx_config 针对某个CPU和开发板进行配置 5,make编译 6,结果生成u-boot.bin 7,利用厂家提供的烧写方法进行烧写 8,
2016-11-24 17:26:06 5071
原创 Linux内核启动流程分析之编译体验
Linux源码编译过程: 1,解压 2,打补丁; 方法 : patch -p 补丁文件名 3,配置,配置有三种方法: 一、直接使用make menuconfig,从头到尾每一项都去配置。(繁琐) 二、使用默认配置,在默认的配置上面修改 三,使用厂家提供的配置文件;使用默认配置的方法: cd 到 arch/arm/configs目录下面,找出一个与自己单板
2016-11-22 11:33:07 657
原创 u-boot分析_uboot启动内核
u-boot 内核启动的时候依赖于以下这两行代码:s = getenv("bootcmd");...run_command(s,0);第一条命令是从nand把内核把读到到一个地址上去;第二条命令是从内核里面启动内核;从哪里读?从kernel分区读; 读到哪里去?放到指定地址(0x30007fc0)去;在PC机上,每一个硬盘前面都有一个分区表。对于嵌入式Linux来说,flash上面没有分区表,
2016-11-21 18:38:04 1082
原创 u-boot分析之u-boot命令实现
当我们在串口的控制台上输入一个命令,要么提示不能识别的命令,要么就会打印某些东西(执行)。这些命令是怎么实现的?使用命令的步骤: 1,输入字符串,对应某些命令名。 2,执行。显然,在程序里面是根据这些命令,找到对应的函数,然后执行相应的函数;在在u-boot不会只有一个结构体,这些命令肯定会有一个结构体,结构体中包括:名字、函数;根据输入的命令到这个结构体链中一一比较,然后执行;先看一下run_
2016-11-21 17:48:41 681
原创 u-boot源码分析
在分析u-boot源码之前,先回忆 一下以前的实验: 1,首先初始化; 2,如果我们的程序很多,需要把程序从Nand拷贝到SDRAM中去。 3,设置栈(sp);所谓设置栈,就是让SP指向某块内存,设置完之后就可以调用C函数;u-bootb也是一个单片机程序,同样也需要做上面的工作;先分析一下 cpu/arm920/start.S文件,从它入手来分析:
2016-11-21 16:22:33 581
原创 u-boot分析之Makefile结构分析
我们分析一个文件的时候,想知道它是什么结构?是怎么链接的,最好的方法就是分析它的makefile文件。之前说过u-boot配置、编译;为什么知道先配置后编译?源码中有个readme文件;先从makefile文件中分析一下配置过程; 执行make的时候,就相当执行这条命令: 我们先在Makefile文件中搜索一下 MKCONFIG看一下是什么东西? 从上可以看出,在源文件的目录下面有一个mkco
2016-11-20 23:58:13 844
原创 uboot编译之体验
在说uboot之前,先看一下PC机是怎么启动的? pc上电、bios、引导操作系统、识别C盘、运行应用程序。同样的在嵌入系统里面,启动过程:一上电的时候,bootlolder(引导linux内核)、挂接根文件系统、运行应用程序。bootlolder的最主要的目的:启动内核补丁? 所谓的补丁就是我们在原码包上做了什么修改,我们将这些修改单独列出来放到一个文件,然后发布的时候,把补丁文件给别人家即可
2016-11-20 23:33:23 1166
原创 LED实验
2440 LCD原理图如下:从图中可以看出,需要的信号有:垂直方向上的信号(vsync)、水平方向的垂直信号(hsync)、时钟(vck)、使能信号(vden)、背光信号(LED+,LED-),数据信号(vd0 - vd23)如果我们想点亮LED,首先要设置GPB0.要知道这些信号怎么联系起来,需要看2440手册上的时序图: 假设LED的分辨率为240*320,LED从左到右、从上到下呈Z 字状的
2016-11-20 22:32:32 1490
原创 系统时钟与URAT(串口)实验
系统时钟,台式机CPU可以跑:1GB 、2GB的赫兹的频率,而我们买的内存跑的频率可能只有133MB赫兹;同样的道理,对于2440的开发板的CPU可以达到400M HZ,而SDRAM的频率范围为:100M-133M HZ,而URAR的频率为 50M HZ; CPU、SDRAM、UART的频率的分别叫:FCLK、HCLK、PCLK;2440的结构是一个SOC(System on chip)的结构;整
2016-11-20 18:52:26 3538 1
原创 中断控制器
在ARM中CPU有七种工作模式:什么叫做工作模式? 每一种工作模式都有哪些东西? 每一种工作模式下面都有一些不同的寄存器、不同的权限、不同的触发条件;不同的寄存器,如图: 可以看出,不同工作模式使用的寄存器是不一样的。比如同是一条指令: mov R8 #1; 在不同的模式下会对应不同的寄存器,这样作的好处是:当从一种模式切换到另外一种模式的时候,如果那一种模式有自己独有的寄存器的话,那么原来
2016-11-20 16:54:50 3829 2
原创 Nand Flash控制器
回忆一下,一上电以后,Nand Flash的前面4K就会被拷贝到2440的片内存里面。 在前面几个程序,编译出来的程序都小于4K;如果我们编译出来的程序大于了4K,这时候Nand Flash的前面4K拷贝到2440的片内存里面,拷贝到2440里面的这4K的任务就是将更大的程序从Nand Flash里面读出来放到SDRAM里面去。地址空间:Nand Flash只有数据线,地址总线并没有跟CPU相连。
2016-11-20 11:17:07 4296
原创 内存管理单元MMU实验
MMU介绍 权限管理:当我们使用windows时,有时候会弹出地址访问错误,但这不影响整个操作系统的运行。 假设A、B程序的时序图如下: 因为A、B程序的地址空间各不相同。权限管理就使得A程序无法访问B程序的地址。如果A程序写的非常糟糕,A程序并不能破坏内核。地址映射:假如有两个hello.c文件,如图: 这两个程序的死循环保证了两个程序同时运行,且这两程序的a变量的地址一样,如图:这两个程
2016-11-20 00:01:29 1236
原创 存储管理器、SDRAM实验
对于2440的存储器来说,他的结构是这样的:存储管理器作用: 2440可以外接SDRAM、网卡,CPU怎么访问这些外设,就是通过存储管理器来访问它们的, 比如CPU想从0X3000,0000 读四个字节的地址,CPU只要执行: MOV R1 0X30000000 , ldr R0 ,[R1];这两条指令即可,存储管理器根据内部的配置信息:1,发出片选信息 2,发出bank选择信号 3
2016-11-19 21:27:40 1152
原创 GPIO实验
目标:点亮LED 怎么点亮LED?看原理图,确定LED是怎么接线的。相关原理图: 简化的原理图: 从原理图中可以看出GPF4=0,灯亮;GPF4=1,灯灭怎么设置GPF4的值呢? GPF4既然做为一个管脚,就可以做为输入管脚、也可以做为输出管脚。因此我们需要配置GPF的功能是输入还是输出还是中断(这里应该配置成输出)?配置完以后,需要设置它的值。具体怎么样设置?操作相应的寄存器,需要进一步查
2016-11-19 14:45:34 4998
原创 环境搭建及工具、概念介始 (makefile)
一、安装 1,安装ubuntu 2,安装虚拟机,然后打开虚拟机,二、安装windows下的配套开发工具。 1,源码编辑查看源码工具:source insight 如何查看uboot源代码? 在uboot源代码新建一个目录si,这个目录用于source insight临时生成的文件;然后新建一个source insight工程,加入相应的文件到目录(可以先全部加入,然后删除不需要的单板对应
2016-11-19 11:36:57 910
原创 学前班-怎么看原理图之内存类接口
类似内存接口,RAM-Like接口 地址线 数据线 2440上可以接网卡、Nor Flash,SDDRAM,这些外设都一起共用数据线与地址线;当2440访问内存的时候,一定不要让网卡、Nor Flash干扰(即互不干扰),怎么样才能做到这一点? CS(chip select):片选线,当某个芯片的CS为低电平的时候,才响应。 地址线、数据线接有众多的设备,怎么做到只访问其中一个,避免
2016-11-18 18:31:24 1632
原创 学前班-怎么看原理图之协议类接口之NAND Flash
NAND Flash原理图: 由NAND Flash的原理图可以看出,做为一个存储芯片,只有I/O引脚,并没有地址引脚,怎么传地址?遵循一定的规范,先通过LDATA把地址传出去,再传数据。具体的需要查看芯片手册。 由图可知:IO0-IO7:既可传送数据也可传送地址,也可以送传命令(是读还是写,还是擦除),怎么区分IO0-IO7传送的是数据?地址?命令? 需要通过CLE与ALE的状态来区
2016-11-18 15:17:46 5304 1
原创 学前班-怎么看原理图之协议类接口之SPI
SPI芯片引脚示例图及引脚描述: 2440: SPI与2440引脚连接简化图: 其中SPIMOST中的M表示master(主机),s表示slave,o表示output,gpio可以用于与spi芯片片选引脚相连。时钟由2440发送,访问前先输出低电平选中(片选)。数字电路就像堆积木一样,找到对应的线,将它接在一起就可以了。如果要通信的话,就需要去查看芯片手册内部的协议。同理也存在SPI芯
2016-11-18 14:11:20 1337
原创 学前班-怎么看原理图之协议类接口之I2C
I2C的原理图如图所示: 原理图可以简化成:2440的SCL外接到外部芯片的SCL,SDA外接到外部芯片的SDA I2CSCL:时钟线 I2CSDA:数据线 两条线上可以挂接多个设备,2440到底是要访问设备1,还是设备2?每一个I2C设备都有一个地址,当数据线的值等于自己的地址值,才做出回应。 I2C的停止信号如图所示: 传输数据? 注意:设备要在SCL为高电平的时候采集数据。回
2016-11-18 11:56:19 1220
原创 学前班-怎么看原理图之协议类接口之UART
2,协议类2.1 URAT在我们平时对话中应该遵循的原则:双方能够听懂对方在说什么;不能说的太快,即语速要让别人接受; 推广到通信当中, 协议类双方应该遵循的原则:双方协定信号的协议;双方满足时序要求; 如上图所示,硬件的通信是通过连接双方的(串口)引脚信号线传输数据的,为什么两个串口可以传那么复杂的数据?这就要求双方必须遵循一定的协议。下面看一下具体的原理图: 将上图简化后: 如图,24
2016-11-18 11:11:48 1780
原创 学前班-怎么看原理图之GPIO与门电路
对硬件电路图分为三类:1,GPIO与门电路(管脚类与门电路类)1.1 输入、输出引脚、上拉电阻、三极管输出引脚示例图:1.2 与门、或门、非门2,协议类2.1 URAT2.2 I2C2.3 SPI 2.4 NAND2.5 LCD3,类似内存的接口3.1 NOR ,SDARM,网卡3.2 不同位宽外的设的接线、访问过程
2016-11-18 09:24:58 4640
转载 Android 利用MediaCodec 实现硬编码 h264
本篇文章记录一下,Android调用mediacodec编码camera回掉的YUV数据为h264的方法。 由于公司需要,软编码(X264)由于手机性能的瓶颈,已不能满足要求,所以决定使用硬编码。其实硬编码最早用过MediaRecord,但是不能直接得到h264数据,得先编成MP4,再从MP4里把H264的NALU取出来,感觉太绕了,所以当时抛弃了MediaRecord,选择了x
2016-11-15 15:17:05 13966 8
转载 RTP/RTCP(一)-H264关于RTP协议的实现(包括分包算法)
H264关于RTP协议的实现2010-07-22 13:35完整的C/S架构的基于RTP/RTCP的H.264视频传输方案。此方案中,在服务器端和客户端分别进行了功能模块设计。服务器端:RTP封装模块主要是对H.264码流进行打包封装;RTCP分析模块负责产牛和发送RTCP包并分析接收到的RTCP包;QoS反馈控制模块则根据RR报文反馈信息动态的对发送速率进行调整;发送缓冲模块则设置端口发
2016-11-10 10:35:07 2538
转载 h.264语法结构分析
NAL Unit StreamNetwork Abstraction Layer,简称NAL。h.264把原始的yuv文件编码成码流文件,生成的码流文件就是NAL单元流(NAL unit Stream)。而NAL单元流,就是NAL单元组成的。标准的Annex B规定了NAL单元组成NAL单元流的方式,下面描述了如何将一个NAL单元打包起来,而多个NAL单元进行组合则形成了N
2016-11-03 23:15:46 1151
转载 H264编码原理以及I帧B帧P帧
前言 H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称,在编码方面,我理解的他的理论依据是:参照一段时间内图像的统计结果表明,在相邻几幅图像画面中,一般有差别的像素只有10%以内的点,亮度差值变化不超过2%,而色度差值的变化只有1%以内。所以对于一段变化不大图像画面,我们可以先编码出一个完整的图像帧A,随后的B帧就不编码全部图像,只写入与A帧的差别,
2016-11-03 22:58:30 1413
原创 JNI修改Native方法数组参数中数组里面的元素值
由于JNI不能直接回调Java方法,有时候我们可能会在Native方法里面的参数放上几个空的数组,让JNI往数组里面放值,Java调用完,再从数组里面取出值。Java代码如下: byte[] bytes = new byte[5]; int[] test = new int[3]; for(int i = 0;i<test.length;i++){
2016-11-02 18:49:10 2896 1
转载 x264代码剖析(七):encode()函数之x264_encoder_encode()函数
转自:http://blog.csdn.net/frd2009041510 encode()函数是x264的主干函数,主要包括x264_encoder_open()函数、x264_encoder_headers()函数、x264_encoder_encode()函数与x264_encoder_close()函数四大部分,其中x264_encoder_encode()函数是其核
2016-11-02 16:56:31 2055
原创 android adt 打印日志
最近Android需要在第三方C语言库的基础上实现音频与视频数据的解码,发现在Android studio中对C语言的支持感觉不是很好,于是采用了eclipse adt开发,在C语言中需要打印日志,步骤如下:1,在C语言的实现文件中定义日志如下:#define TAG "H264AndroidJNI"#ifdef ANDROID#include #include #def
2016-11-02 15:38:31 996
原创 编译各个架构的libx264-android脚本
#!/bin/sh############################################################### 注:# 此处默认使用 $ANDROID_NDK/platforms/android-21 版本,此# 版本只支持32位toolchain。# 如果项目中有使用到 ndk-build 工具,请在 Application.mk
2016-11-02 11:49:38 3174
程序员接单宝典(第三版)
2016-11-24
Android系统源代码情景分析(高清+目录)
2016-11-16
QT纯源码自定义QTableWidgetw分页
2020-09-21
mac cmake安装包
2020-07-20
最全的区块链文档
2018-01-11
ApkTool+auto-sign Android反编译打包+签名(反编译工具)
2017-03-27
苹果的远程通知需要收费吗?
2016-02-24
腾讯企业邮箱单点登陆
2015-01-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人