Machine ID问题
问题背景以前的一个旧产品需要升级SDK,包括loader、uboot、kernel、sdk等。在升级kennel的时候遇到下面一个machine ID的问题:
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
Error: unrecognized/unsupported machine ID (r1 = 0x00000778).
Available machine support:
ID (hex) NAME
ffffffff VATICS vienna SoC (Flattened Device Tree)
Please check your kernel config and/or bootloader
解决后面通过修改读取DTB的内存地址解决了,就是下面的0x1400000。CONFIG_BOOTCOMMAND bootcmd
#define CONFIG_BOOTCOMMAND_NET "tftp 0xa00000 zImage;tftp ...
RK3399之开机Logo动画壁纸相关
背景
Platform: RK3399
OS: Android7.1.2
Kernel: v4.4.103
修改Uboot、Kernel开机Logo只需替换kernel/logo.bmp(uboot)和kernel/logo_kernel.bmp
修改Android开机动画蒙版图片动画蒙版图片动画是通过两张图片叠加移动实现动画效果,所以只需修改这2张图片
镂空蒙版图片:(要求背景为黑色,字体中间镂空)frameworks/base/core/res/assets/images/android-logo-mask.png镂空蒙版后面的闪光图片:frameworks/base/core/res/assets/images/android-logo-shine.png
替换后的处理:
#防止源码不编译图片,需更新图片时间戳
$ touch frameworks/base/core/res/assets/images/android-logo-mask.png
#重新编译模块
$ source build/envsetup.sh
$ lunch xxx
$ mmm frameworks/b ...
Android音频声道数据处理
问题:音频声道数据异常分析
分析:1. 检查硬件信号MICBIAS偏置电压:2点多V,正常OK进运放前MIC的信号:OK运放后的信号:OK
2. 检查音频通道切换使用Tinymix查看通道是否OK?: OK
3. 检查数据立体声pcm数据结构Android录音默认录制生成的是pcm文件,假设我们设置采样率为16K,录音类型为AudioFormat.CHANNEL_IN_STEREO(立体声录音),数据类型为AudioFormat.ENCODING_PCM_16BIT。则pcm文件的数据结构大致为2byte左声道、2byte右声道、2byte左声道、2byte右声道
立体声拆分:
private void splitStereoPcm(byte[] data) {
int monoLength = data.length / 2;
byte[] leftData = new byte[monoLength];
byte[] rightData = new byte[monoLength];
for ( ...
Android7.1之WIFI热点问题
背景项目需求,需要在Android应用中打开关闭和配置WIFI热点,开始以为只需要简单地调用几下系统API就可以了,后来发现是个大坑。不同的Android版本操作热点的方式还不一样
Android7.0及以前的版本是通过WifiManager的setWifiApEnabled,具体方式如下:
WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
Method method = mWifiManager.getClass().getMethod("setWifiApEnabled",
WifiConfiguration.class, boolean.class);
//反射
method.invoke(mWifiManager, null, false);
在Android7.1及后面的版本,主要是通过ConnectivityManager的startTethering方法来操作的。
而且对于Android7. ...
RK3399之AP模块蓝牙兼容问题
背景项目中,换了一个AP的WIFI/BT模块,AP6356S换成了AP6236。按照RK的WIFI/BT模块兼容框架,把新模块加了进去,简单测试,WIFI的station和ap都没问题,蓝牙a2dp播放没问题,但发现SCO通话模式有问题,一点正常的声音都没有,而且每隔一段时间会有一个很明显的噪声。
后面通过和硬件一起排查,发现新模块(AP6236)在SCO通话模式下,I2S的两边都有时钟输出,即CPU和模块都是master模式。
为什么a2dp模式是正常的呢?AP模块的A2DP模式走的是UART,SCO模式才走I2S接口
解决找到上述原因之后,解决就好办了。修改CPU和模块的模式。
在未修改之前,CPU是master,模块是slave。以前的老模块是OK没问题,但是新模块(AP6236)就是不行,估计是它的固件不支持做slave。首先我只修改CPU的模式,由以前的主改成了从。果然,新模块(AP6236)就OK,但是老模块不行,因为模块这边也是配置的从模式。RK3399这边主要修改DTS配置,修改如下:
bt_sound: bt-sound {
status ...
Shell解析JSON及Http
背景通过Shell脚本进行升级,主要涉及到json的解析和http请求文件
解决
shell解析Json:通过jq命令,基本使用方式如下:#xxx为对应字段,yyy为json文件路径,jq -r .terip /ini/config.json
jq -r .xxx yyy
http获取升级包可以通过wget或者curl命令
USB-WIFI模块调试
准备模块驱动编译make ARCH=arm CROSS_COMPILE=arm-hisiv400-linux-
Makefile:
obj-$(CONFIG_RTL8723BU) += rtl8723bu/
Kconfig:
source "drivers/net/wireless/rtl8723bu/Kconfig"
##最好编译成模块
工具编译可以使用buildroot来编译,减少依赖问题。也可以单独编译
openssl
wpa_supplicant
libnl
wpa_supplicant
WIFI Station模式内核配置Networking support —>Wireless下增加802.11 协议栈的支持:cfg80211
使用iwconfig
#rfkill list
#rfkill unblock wlan
./wpa_supplicant -d -B -Dnl80211 -iwlan0 -c./wpa_supplicant.conf
./wpa_supplicant -d -Dwext -iwlan0 -c./wpa_supplicant.co ...
Ubuntu挂载新硬盘
背景
Platform: X64
OS: Ubuntu16.04 Desktop
在Ubuntu的机器上新加了一块1T的硬盘,需要挂载上去
查看新硬盘:sudo fdisk -l
格式化:sudo mkfs.ext4 /dev/sdb或sudo mkfs -t ext4 /dev/sdb
分区大容量(>2T)使用parted分区
普通分区进行分区:
sudo fdisk /dev/sdb
m
n
e
2
p
w
GPT分区(已验证)sudo parted /dev/sdb
#输入:mklabel gpt 将磁盘设置为GPT格式
#分2个区
mkpart primary ext4 0GB 512.0GB
mkpart primary ext4 512.0GB 100%
#输入:print 查看分区结果
#输入:quit
#通知系统分区表的变化
partprobe
格式化分区sudo mkfs.ext4 -F /dev/sdb1
新建挂载点:mkdir xxx手动mount挂载测试
编辑系统挂载配置文件:vim /etc/fstab
#添加 ...
SD卡自动烧录固件
背景在生产的过程中SD卡自动烧录很方便,那要怎么做呢?主要有分以下2种情况:
芯片可以从SD卡启动
芯片不能从SD卡启动
芯片可以从SD卡启动类似M5502S.这种情况有2种方式:
使用Uboot的Auto-burn烧录
使用Linux系统烧录 使用Uboot的Auto-burn烧录Auto-burn就是在uboot的cmdline运行烧录脚本来烧录固件。
准备SD卡每个平台可能有所不一样,以M5S为例,分区并格式化SD卡,并将其volume name改成特定的“BOOTEXT”将SD卡的loader拷贝进SD卡
准备uboot准备可支持自动运行烧录脚本的ubootauto-burn功能模式在uboot的配置中默认是关闭的,需要将其打开。修改默认的环境变量bootargs和bootcmd,让其默认就执行SD里面的自动烧录脚本镜像类似于:
#define CONFIG_BOOTCMD_UPGRADE "fatload mmc 0:1 0xa00000 ${auto_script}; source 0xa00000"
将编译好的uboot ...
RK3399之背光PWM
背景
Platform: RK3399
OS: Android7.1.2
Kernel: v4.4.103
DTS配置backlight: backlight {
status = "disabled";
compatible = "pwm-backlight";
pwms = <&pwm0 0 25000 0>;
brightness-levels = <
0 1 2 3 4 5 6 7
8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31
32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55
56 ...
RK3399添加外部独立RTC
背景
Platform: RK3399
OS: Android7.1.2
Kernel: v4.4.103
以前使用的是RK808内部的RTC,说电流较大,电池不耐用,后面就外置了一个独立的RTC芯片–ISL1208。现在这2个RTC同时存在,或只有以前的RK808,需做兼容处理。
Kernel内核部分:
添加对应RTC芯片的驱动源码(kernel/drivers/rtc/rtc-isl1208.c)
修改Kconfig和Makefile,添加对应的编译选项
dts添加节点配置:&i2c3 {
status = "okay";
i2c-scl-rising-time-ns = <450>;
i2c-scl-falling-time-ns = <15>;
/*RTC*/
rtc: isl1208@6f {
status = "okay";
compatible ...
Github下载单独文件夹
使用DownGit这是别人提供的一个在线工具:https://github.com/MinhasKamal/DownGit只要把目录链接(比如:https://github.com/xxxxxxxx/tree/xxx/ch03)拷贝,然后点击download就可以下载目录的压缩文件
一直打不开,所以未验证过
使用svn1、复制浏览器中对应的URL 地址,如:https://github.com/xxxxxxxx/tree/xxx/ch032、将 /tree/xxx/ 换成 /trunk/,使用 svn 命令即检出, 或使用SVN可视化工具:
svn co https://github.com/xxxxxxxx/trunk/ch03
这个验证过,OK