内核中修改和保存defconfig的方法


【需求】

修改和保存defconfig

【分析】

使用make ARCH=arm 或者 arm64 xxxx_defconfig,可以将xxxx_defconfig,生成kernel根目录的.config。

在根目录执行make menuconfig 可进入 .config的图形化修改界面。

在根目录执行,make savedefconfig 生成defconfg文件。

【结论】

对比 defconfg 和 xxxx_defconfig 或者直接拷贝过去就好了。

 

DDR 常见模式的测量判断方法


【简述】

各类型DDR在运行中,有三种模式比较常见,在调试过程中需要特别注意,分别为:

运行模式,自刷新模式( self-refresh )和断电模式(auto power down )。

【方法说明】

通过测量DDR的CKE脚的电平变化状态判断DDR当前的模式,标准如下:

低电平持续时间时间大于7.8us,DDR处于自刷新模式。

DDR3、DDR4低电平持续时间小于或者等于7.8us,LPDDR2、LPDDR3、LPDDR4低电平持续时间小于或者等于3.9us,DDR处于断电模式

CKE为高电平,为正常工作模式

【特别说明】

自刷新模式和断电模式都是省电模式,通常情况DDR是会在模式之间切换,我们会看到CKE的电平出现高低变化,说明DDR在各状态之间切换。

全志A133 Android 10 前后相同摄像头型号修改记录


【问题】

全志A133 Android 10 使用前后置都为相同的摄像头时,会出现i2c注册失败的问题,从而导致摄像头调试失败,具体log见下所述:

  1. [    4.472993] [c2590_mipi_r]PWR_ON!
  2. [    4.531231] [c2590_mipi_r]sensor_init
  3. [    4.532734] [c2590_mipi_r]V4L2_IDENT_SENSOR = 0x202
  4. [    4.532738] [c2590_mipi_r]sensor_init ok !
  5. [    4.532742] [c2590_mipi_r]PWR_OFF!
  6. [    4.541169] i2c i2c-2: Failed to register i2c client c2590_mipi_f at 0x36 (-16)

运行中会出现:

  1. [   20.851147] [c2590_mipi_r]PWR_ON!
  2. [   20.910241] [c2590_mipi_r]sensor_init
  3. [   20.911581] [c2590_mipi_r]V4L2_IDENT_SENSOR = 0x202
  4. [   20.911586] [c2590_mipi_r]sensor_init ok !
  5. [   20.912813] [c2590_mipi_r]PWR_OFF!
  6. [   20.925117] [VIN_ERR]there is no valid sensor

【解决方法】
1. 在 kernel/linux-4.9/drivers/media/platform/sunxi-vin/modules/sensor/camera.h 中增加:

  1. #define CONFIG_SAME_I2C  

2. 在所有的驱动文件中的probe函数中增加:

  1. #ifdef CONFIG_SAME_I2C  
  2.     info->sensor_i2c_addr = (0x6c >> 1);  
  3. #endif  

以上我踩的坑,记录一下!

DDR 相关问题排查指南


一般DDR相关问题,主要的表现为死机,重启,通常需要配合串口打印一起进行分析,这里列举常见的DDR 问题的排查思路。

    • 怎么确认是不是DDR问题?

1.   查看串口log

    • 如果串口log是在loader中的DDR初始化部分报错的话一定是DDR问题。
    • 查看loaderDDR初始化部分log中的DDR容量行列bank及颗粒类型位宽信息是否正确,如果信息错误可能引起DDR问题
    • 如果串口log是kernel 部分系统中的panic log的话,可以多尝试几次看多次panic的地址是否一致,如果不一致的话有可能是DDR问题,也可能是电源问题。

2.  看显示是否正常,如果显示异常是DDR问题的概率比较大。 

3.   做排查试验: 

    • arm gpu降频,定频适当抬压,如果有效果的话就不是DDR问题。基本上能确认是电源问题。
    • 关闭DDR变频功能,有效果则DDR变频导致的问题概率比较大。
    • 降低DDR频率到稳妥频率如200M 如果有效果那很大概率是DDR信号质量有问题。

Continue reading "DDR 相关问题排查指南"

rk平台DDR部分打印解析


rk各平台DDR部分打印信息有类似,其中包括loader中的打印和kernel中的打印,其解析分别如下所示:

1. loader中打印的解析如下:

  1. DDR Version 1.05 20170712// DDR 初始化代码的版本信息,用于核对版本。从这行开始,已经进入DDR初始化代码
  2. In
  3. SRX // 有SRX,说明是热重启;没有SRX,说明是冷开机。有的芯片没加这个功能,一直都是没有SRX的
  4. Channel a: DDR3 400MHz // 下面都是DDR容量的详细信息
  5. Bus Width=32 Col=10 Bank=8 Row=15 CS=1 Die Bus‐Width=16 Size=1024MB
  6. Channel b: DDR3 400MHz
  7. Bus Width=32 Col=10 Bank=8 Row=15 CS=1 Die Bus‐Width=16 Size=1024MB
  8. Memory OK // DDR自测的结果,第一个Memroy OK是Channel a的自测结果
  9. Memory OK // 是Channel b的自测结果。有报错,说明焊接有问题;没报错,说明当前自测没问题,整个DDR是否能稳定工作,还得看后续阶段的运行结果。
  10. OUT // 这行打印之后,就退出了DDR初始化代码

2. kernel 3.0和kernel 3.10中打印的DDR信息:

  1. [ 0.528564] DDR DEBUG: version 1.00 20150126 //版本信息
  2. [ 0.528690] DDR DEBUG: Channel a: //DDR容量详细信息
  3. [ 0.528701] DDR DEBUG: DDR3 Device
  4. [ 0.528716] DDR DEBUG: Bus Width=32 Col=10 Bank=8 Row=15 CS=1 Total Capability=1024MB
  5. [ 0.528727] DDR DEBUG: Channel b:
  6. [ 0.528736] DDR DEBUG: DDR3 Device
  7. [ 0.528750] DDR DEBUG: Bus Width=32 Col=10 Bank=8 Row=15 CS=1 Total Capability=1024MB
  8. //后面还有其他DDR打印信息,可以不用管,是写DDR驱动人员用的
  9. //DDR DEBUG的字样打印结束,就是kernel中DDR初始化完成了

3. kernel 3.10还会有如下打印,是DDR变频模块的输出信息:

  1. [ 1.473637] ddrfreq: verion 1.2 20140526 //DDR变频模块版本
  2. [ 1.473653] ddrfreq: normal 396MHz video_1080p 240MHz video_4k 396MHz dualview 396MHz idle
  3. 0MHz suspend 200MHz reboot 396MHz //DDR各个场景对应的频率,是从dts表格中读取出来的
  4. [ 1.473661] ddrfreq: auto‐freq=1 //负载变频功能是否开启,1表示开启,0表示关闭
  5. [ 1.473667] ddrfreq: auto‐freq‐table[0] 240MHz //负载变频的频率表格
  6. [ 1.473673] ddrfreq: auto‐freq‐table[1] 324MHz
  7. [ 1.473678] ddrfreq: auto‐freq‐table[2] 396MHz
  8. [ 1.473683] ddrfreq: auto‐freq‐table[3] 528MHz
  9. //如果在这段打印过程中系统卡死了,很可能是DDR变频有问题

重点说明:

    • DDR的详细信息,会包含有:DDR类型、DDR频率、通道信息(Channel a\Channel b)、总线数据位宽(buswidth/BW)、行数量(row)、列数量(col/column)bank数量(bank/BK)、片选数量(CS)、单颗颗粒的数据位宽(DieBus width/Die BW)、单个通道的DDR总容量(size/Total Capability)
    • 如果需要整机的总容量,芯片只有一个DDR通道的,整机容量就等于size/Total Capability。芯片有2个通道的,整机容量等于2个通道的size/Total Capability相加。