- 博客(131)
- 资源 (3)
- 收藏
- 关注
转载 DDR3基本概念 - Write leveling(写入均衡)
原文链接:https://blog.csdn.net/tbzj_2000/article/details/88304245为了提供更好的信号完整性,DDR3的memory controller可以使用write leveling来调整DQS差分对和CK差分对的相对位置,利用DQS差分对路径上的可调整延时来达成该目的。对于简单的运用,比如on-board DDR memory,并且仅有一颗DDR内存的情况下可以考虑不需要做write leveling。T型布线,如下图。该布线方式同步切换噪声(Simul
2021-06-17 15:24:54
2460
转载 DDR3基本概念 - 8n pre-fetch architecture的含义
原文链接:https://blog.csdn.net/tbzj_2000/article/details/90762749在DDR3标准中提到"The DDR3 SDRAM uses a 8n prefetch architecture to achieve high-speed operation".n表示DDR内存颗粒的位宽(一般为4/8/16bits). 8表示burst的最大数据量。为了获取最佳的性能,DDR3一次读写数据位数为8 x n。如下图所示,READ 通道有一个32数据到8个4位b
2021-06-17 15:18:56
1341
原创 4412 audio 分析
文章目录1. 音频基本概念1.1 原理图1.2 IIS通信时序1.3 了解几个概念2. 主从模式分析3. 时钟分析3.1 Audio sub system3.2 epll3.3 IIS4. 修改记录1. 音频基本概念1.1 原理图SOC与codec之间通信分为控制接口I2C和数据接口I2S,I2S有三个时钟信号,MCLK,BCLK,LRCLK,这三个时钟尤为重要。1.2 IIS通信时序1.3 了解几个概念采样频率(FS):一秒采集多少个声音“像素”,每采集一个点,左右声道切换一次,
2021-06-16 11:06:31
1868
原创 common clk framework
文章目录1. 概述2. mux、gate、divider注册过程分析clk_hw_register_muxclk_hw_register_gateclk_hw_register_dividerclk_register3. 4412 audio clk 的注册过程of_clk_add_hw_provider4. 时钟的使用过程分析clk_getclk_enableclk_get_rateclk_set_rateclk_set_parent1. 概述2. mux、gate、divider注册过程分析内核将
2021-06-16 10:36:29
1608
1
原创 内核启动早期的打印
在移植4.16内核到tiny4412的过程中遇到一个问题,官方的uboot2012引导内核成功卡在staring the kernel没有了下文,看来内核还没有到注册uart驱动就已经挂掉了,尝试打开 early printk ,让内核自解压之后能够及时的打印信息。说句题外话,内核启动卡在staring the kernel,在2440的时代,未使用设备树,这种情况往往是机器ID设置错误,或者是串口波特率等方面的原因导致,在设备树的时代,机器ID已经被废除,最有可能的问题可能就是出在设备树的身上。##e
2021-06-11 13:49:27
1436
3
原创 perf性能瓶颈分析小试牛刀
文档https://perf.wiki.kernel.org/index.php/Tutorial#Live_analysis_with_perf_top内核配置CONFIG_PERF_EVENTS=y编译make -C tools/perfAuto-detecting system features:... dwarf: [ OFF ]... dwarf_getlocations: [ OFF ]...
2021-06-10 10:14:08
1686
原创 一款特殊的LCD屏幕驱动调试
一款特殊的LCD屏幕驱动调试问题分析这款LCD屏幕的有效显示区域为 480 * 1280, 但是它的timing时序却是600 * 1280。时序要求600 * 1280意味着主控需要通过物理接口输出600 * 1280的图像,然而LCD的背板芯片会剪裁掉左右两侧各60像素,得到480 * 1280的显示区域。那么我们的LCD屏幕参数该如何配置?Framebuffer的参数该如何配置?Framebuffer 配置成 600 * 1280,请应用层同学自行解决,画UI的时候画600*1280的。
2021-06-04 14:22:36
855
原创 mkimage使用与解包
在最初学习阶段,我们经常使用mkimage来制作uImage和ramdisk,实质是在被处理的文件前面加上64字节的头部。mkimage 制作 uImagemkimage -A arm -O linux -T kernel -C none -a 30008000 -e 30008040 -n linux-3.0 -d zImage uImagemkimage 制作 ramdisk.i...
2019-09-20 15:13:53
15586
原创 Android Binder 修炼之道(四)Binder 系统C++ 发送数据过程以及Server注册服务处理数据的过程
本节分析发送数据过程以及Server注册服务处理数据的过程1#define LOG_TAG "CalculateService"2//#define LOG_NDEBUG 034#include 5#include 6#include 7#include 8#include 9#include 10#include 11#include 1213#include "ICalcula
2017-08-12 11:07:24
1949
原创 Android Binder 修炼之道(三)Binder 系统C++实现 BpXXX代理类分析
在 Binder 系统中,分为 Client ServiceManager Server 三部分,C++是面向对象的语言,因此,这三者对应三个类的实例。ServiceManager 由 Android系统实现,我们只需要实现我们自己的 client 和 Server 类即可。 在 Binder 系统 C 的实现中,我们的 Client 和 Server 都实现了 sddone 和 r
2017-08-10 22:43:30
1993
原创 Android Binder 修炼之道(二)Client Server 实例
前面一节,分析了 Binder 系统中的骨架,了解了 Client ServiceManager Server 三者之间的关系,重点针对 ServiceManager 分析了服务的注册过程以及查询过程。本节,将重点放在实现一个简单的 Server 和 Client ,加深对于代码的理解。首先是 Server:我们要向 ServiceManager 注册 1 个 calcul
2017-07-29 15:26:57
1225
1
原创 Android Binder 修炼之道(一)框架分析
在 Android 系统中含有大量的进程间通讯,Android 系统的开发人员为了进程间通讯使用起来更方便,在Linux内核里搞了一个 Binder 驱动,然后利用这个 Binder 驱动进行一些进程间的数据传输。在 Android 中对如何使用 Binder 驱动进行了封装,有C版本,也有C++和JAVA版本,将它们统称为 Binder 系统。有了这些封装之后,使用者只需要调用固定的接口,便可以
2017-07-28 09:45:22
1582
原创 Android init.rc on property
在 init.rc 中,可以见到下面类似的用法,当一个属性值等于XX时,触发下面的事件,比如启动一个进程on property:sys.init_log_level=* loglevel ${sys.init_log_level}那么它是如何实现的,启动时触发一次?还是任何时刻只要属性值满足条件就触发? 实验验证结果:1、启动时,如果属性满足设定条件会触发一次
2017-07-26 23:04:32
12956
原创 Android 5.1 截屏事件分析(Power + VolumeDown)组合键分析
为了实现组合键启动app的功能,参考了Android中截屏事件的处理流程,实现同时按下Power+音量增键启动电阻屏校准App的功能,下面是Android 代码中关于截屏按键部分的处理代码简要分析: 安卓5.0代码中,同时按住power键和音量-键一会可触发截屏事件PhoneWindowManager.java (base\policy\src\com\android\i
2017-07-24 17:22:00
4922
原创 电阻屏校正 tslib 五点校正算法
#include struct calibration { int x[5]; int y[5]; int xfb[5]; int yfb[5]; int a[5];};struct calibration cal;int perform_calibration(struct calibration *cal) { int j; float n
2017-07-22 12:51:19
5371
1
原创 固定 event 节点
相信与Linux驱动打交道的人都会遇到这样一个问题,由于插入Input设备的时机不同,导致内核每次创建 event 节点未必一样,给应用程序的参数设置带来困难,比如qt设置环境变量。如何做到无论啥时候插拔设备 event 节点都固定下来?网上有改内核的做法,修改event节点创建部分的代码能够解决问题,但是换个设备就白瞎了,而且对内核开刀总是显得不太优雅。解决思路:
2017-07-07 15:53:45
2069
1
原创 Android backlight
frameworks\base\services\core\java\com\android\server\power\PowerManagerService.javapublic final class PowerManagerService extends SystemService implements Watchdog.Monitor { ...
2017-06-18 21:38:59
2055
原创 Android lights system
Android 中的灯光子系统采用的是硬件访问服务框架,JNI 层的文件是 com_android_server_lights_LightsService.cpp (frameworks\base\services\core\jni)Java 程序通过 JNI 调用 setLight_native 来控制背光、通知灯、电池灯灯。 Java: frameworks/base/
2017-06-13 21:17:48
1641
原创 Android 修改 init.rc
Android 根目录下可以看到 init.rc ,但是却无力修改,改了也白瞎,重启就恢复了,ramdisk....init.rc 是 rootfs 中的文件,Android 将 rootfs(initramfs) link 到 linux kernel image 中,生成正常启动的boot.img, recovery 模式的 recovery.img.Android 每
2017-06-13 19:48:37
9768
1
原创 Android led_class driver
Linux的led class驱动echo 255 > /sys/class/leds/led1/brightnesscat /sys/class/leds/led1/brightnesscat /sys/class/leds/led1/max_brightness闪烁echo timer > /sys/class/leds/led1/trigger
2017-06-11 21:13:10
1424
原创 Android 消息处理机制——线程通信
package com.example.hasee.androidmsg;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.os.Handler;import android.os.Looper
2017-06-11 16:45:26
518
原创 Android 硬件访问服务
怎么实现硬件访问服务1、JNI和HALcom_andorid_server_ledService.cpphal_led.c2、修改onload.cpp 调用 com_andorid_server_ledService.cpp 实现的函数3、修改systemServer.java new ledService & addService
2017-06-10 22:59:22
777
原创 Android JNI
什么是JNI,Java Native Interface ,Java 本地调用。Java 虽然具有跨平台的特性,但是Java和具体的平台之间的隔离是通过JNI层来实现的,Android 中 Java 通过 JNI 层调用 Linux 中的接口来实现对应的功能。JNI 层一般是由 C C++ 文件编写。Java 程序1、加载对应的JNI库,同行的做法是放在类的 sta
2017-06-10 18:45:22
5359
原创 设备树学习之(十三)电容触摸屏驱动
开发板:tiny4412SDK + S702 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 busybox版本:busybox 1.25友善之臂提供的资料中,触摸屏驱动采用的是一线触控,但是保留了i2c接口,驱动芯片为FT5406,本文主要实现 i2c 接口的
2017-02-16 18:05:51
6934
1
原创 第十章 内核同步方法
原子操作原子正数操作定义一个 atomic_t 类型的数据方法很平常,你还可以在定义它时给它设定初值:atomic_t v; //定义vatomic_t u = ATOMIC_INIT(0); //定义u并把它初始化为0atomic_set(&v, 4); //v = 4 atomic_add(2, &v);
2017-02-04 19:44:02
815
原创 第九章 内核同步介绍
临界区所谓临界区就是访问和操作共享数据的代码段。多个执行线程并发访问同一个资源通常是不安全的,为了避免在临界区中并发访问,编程者必须保证这些代码原子的执行——也就是说,操作在执行结束前不可被打断,就如同临界区是一个不可分割的指令一样。竞争如果两个执行线程有可能处于同一个临界区中执行,那么这就是程序的一个Bug,如果这种情况确实发生了,我们就称它为竞争条件。同步避免并发和防止竞争条件称为同步。内核同步
2017-02-04 18:43:59
623
原创 第八章 下半部和推后执行的工作
上半部的局限性:中断处理程序以异步方式执行,并且它有可能打断其他重要代码(甚至包括其他中断处理程序)的执行,因此中断处理程序应该越快越好。如果当前有一个中断处理程序正在执行,在最好的情况下(如果IRQF_DISABLED没有被设置),与该中断同级的其他中断被屏蔽,在最坏的情况下(设置了IRQF_DISABLED),当前处理器上所有其他中断都会被屏蔽。因为禁止中断后硬件与操作系统无法通信,因此,中
2017-02-02 20:24:24
697
1
原创 第七章 中断和中断处理
什么是中断中断本质上是一种特殊的电信号,由硬件设备发向处理器,处理器接收到中断后,会马上向操作系统反应此信号到来。硬件设备产生中断的时候并不考虑处理器的时钟同步,因此中断是异步的,换句话说中断随时可能产生。什么是异常异常一般由处理器本身引起(异常是同步中断),比如运算中的除0操作。中断处理程序——中断上下文、原子上下文中断处理程序与其他内核函数的真正区别在于,中断处理程序是被内核调用来相应中断的,而
2017-02-01 21:46:41
971
1
原创 第五章 系统调用
什么是系统调用系统调用在用户进程和硬件设备之间添加了一个中间层。该层的作用有三个:首先,它为用户空间提供了一种硬件抽象接口,举例来说,当需要读写文件的时候,应用程序就可以不去管磁盘类型和介质,甚至不用去管文件所在的文件系统是那种类型。第二,系统调用保证了系统的稳定和安全。作为硬件设备和应用程序之间的中间人,内核可以基于权限、用户类型和其它一些规则对需要进行的访问进行裁决。第三,每个进程都运行在
2017-02-01 21:34:15
717
原创 第四章 进程的调度
1. 什么是调度现在的操作系统都是多任务的,为了能让更多的任务能同时在系统上更好的运行,需要一个管理程序来管理计算机上同时运行的各个任务(也就是进程)。这个管理程序就是调度程序,它的功能说起来很简单:决定哪些进程运行,哪些进程等待决定每个进程运行多长时间 此外,为了获得更好的用户体验,运行中的进程还可以立即被其他更紧急的进程打断。总之,调度是一个平衡的过程。一方面,它要保证各个运行的进程能够
2017-01-31 22:15:30
771
原创 第三章 进程管理
1、进程和线程 进程就是出于执行期的程序,但进程并不仅仅局限于一段可执行代码。通常还要包括其它资源,像打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存空间地址及一个或多个执行线程,当然还包括用来存放全局变量的数据段等。 执行线程,简称线程,是在进程中活动的对象,每个线程拥有独立的程序计数器、进程栈和一组进程寄存器。内核调度的对象是线程,而不是进程。 对 L
2017-01-31 22:01:38
613
原创 第二章 从内核出发
内核开发的特点:内核编程时既不能访问 C 库,也不能访问标准的 C 头文件。内核编程时必须使用 GNU C。内河编程时缺乏像用户空间的那样的内核保护机制。内核编程时难以执行浮点数运算。内核给每一个进程只有一个很小的定长堆栈。由于内核支持异步中断、抢占和 SMP,因此必须时刻注意内核同步和并发。要考虑可移植性的重要性。1、无 libc 库抑或无标准头文件 对内核来说完整的 C 库——
2017-01-30 16:40:41
619
原创 第一章 Linux内核简介
1.1 Unix 特点Unix 很简洁,不像其他动辄几千个系统调用并且设计目的不明确的系统,Unix 仅仅提供几百个系统调用并且有一个非常明确的设计目的。Unix 中所有的东西都被当作文件对待。Unix 内核和相关的系统工具软件是用 C 语言编写而成。Unix 进程创建非常迅速,并且有一个非常独特的 fork()系统调用。1.2 Linux 简介Linux 是类 Unix 系统,但它不是
2017-01-30 16:32:58
896
原创 设备树学习之(十二)LCD驱动
开发板:tiny4412SDK + S702 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 busybox版本:busybox 1.25参考:tiny4412LCD驱动加字符显示1、背光 友善之臂的该款LCD采用了一线触控技术,包括背光控制也集成在一线触控之
2017-01-26 10:16:46
8187
11
原创 学习设备树之(十一)Backlight
开发板:tiny4412SDK + S702 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 busybox版本:busybox 1.25目标: 由于 tiny4412 的lcd背光控制采用的一线触控,并不开源,因此移植友善自带的linux3.5 内核中的背光相关
2017-01-15 22:57:27
2918
原创 设备树学习之(十)spi flash
开发板:tiny4412SDK + S702 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 busybox版本:busybox 1.25目标: 驱动外接的8M的 spi flash,注册为块设备。设备树:&spi_0 { status = "ok
2017-01-15 22:30:38
4637
原创 设备树学习之(九)SPI设备注册过程
开发板:tiny4412SDK + S702 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 busybox版本:busybox 1.25目标: 同 i2c 一样,分析 spi 设备的注册过程,其实是一模一样的。int spi_register_master(st
2017-01-15 22:23:02
7892
1
原创 设备树学习之(八)eeprom
开发板:tiny4412SDK + S702 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 busybox版本:busybox 1.25目标: 驱动 tiny4412 底板上的 i2c eeprom ,使用字符设备进行读写。原理图: 设备地址为
2017-01-15 22:15:30
2222
1
原创 设备树学习之(七)I2C设备的注册过程分析
开发板:tiny4412SDK + S702 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 busybox版本:busybox 1.25目标: 设备树中普通的节点都被注册为平台设备驱动中的“设备”,也是注册到 platform_bus_type 的,但是 i2c
2017-01-15 21:50:18
6987
2
原创 设备树学习之(六)RTC
开发板:tiny4412SDK + S702 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 busybox版本:busybox 1.25目标: Linux4.4 中已经对 tiny4412 rtc 有了支持,但是使能设备树之后启动报错,简单修改,使 rtc 正常
2017-01-15 21:05:45
2452
dnw_fastboot_for2440
2016-12-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人