- 标题1
- a64调试目标-第一阶段一些常见的接口可以工作
- a64调试计划-搭建开发环境
- a64调试计划-第一轮
- 一 默认的bin文件能烧录
- 二 bootloaderlinuxandroid能运行 串口能显示交互
- 三 hdmi能显示
- 三 hdmi能显示横屏全屏 20161012
- 四 usb鼠标能用进入桌面 20161014
- 五 lvds-1366屏能正常输出能显示横屏全屏和竖屏全屏 20161014
- 六 rj45 20161018 给到多媒体组移植多媒体程序测试软件兼容性和稳定性
- 七lvds-1080屏能正常输出能显示横屏全屏和竖屏全屏 20161024
- 八 sysconfig在kernel下可以读取 支持shell脚本开机加载开机支持调用sh脚本initshinesh
- 九 背光
- 十 rtc
- 十一 uart
- 十二 gpio
- 十三 红外
- 十四 摄像头
- 没有电强制初始化电发现也不好使
- 对比r16发现是先不管2035的驱动根本没有调用到VFEvfe sensor detect start input_num 0
- 之前老是没有电 后来发现之前suspendresume在a33驱动里面并没有开关摄像头的电源只是操作pwdnreset的gpio改了这个试试
- 可是发现好像还是不行internal_s_input老是提示dev_qty的错误
- 后来可能和senserlistisp_used 等有关系 把这些都保持和a33一样
- 没进入中断函数vfe interrupti2c有通信可能reset芯片后最好还是sensor_init里面把i2c初始化代码都做一遍看看但其实之前a33不用每次都重新在sensor_init里面i2c重新初始化的
- 十五 没解决开关屏遥控器开机关机rtc定时开机
- 十六 eth0的dns为什么设置不好使
- 十七 耳机speakermic 键盘tf卡
- 十八听筒
- 十九uboot下的usb otg
- 二十二 剩余 i2c触摸屏
- 二十三屏上电顺序
- a64调试计划-第二轮
- a64调试计划-第三轮
标题1
标题2
标题5
【a64】【调试目标-第一阶段】一些常见的接口可以工作
摄像头
2个串口
tf卡
耳机
usb需要给电
喇叭应该能用line in out
mic
听筒
红外-驱动
网卡-驱动
mipi: lcd的电, backlight电有但是onoff没开, , pwm没有,电压低。默认mipi 就认为4lane8bit不用改; 外面lvds, 单通道 8bit。 暂时i2c也可以不改。
我的分辨率如果是1366的屏,1920的屏根据屏参调
【a64】【调试计划-搭建开发环境】
================
编译android,按照文档, lunch记得选tulip-p1 30.
然后把解压的prebuilts 移动到 /home/6a918/a64/android,否则会提示
/bin/bash: prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-gcc: No such file or directory
分析2) make -j8 发现如下问题
target C: dhcpcd_test <= external/dhcpcd/dhcp.c
make: * No rule to make target device/softwinner/tulip-p1/kernel', needed by
out/target/product/tulip-p1/kernel’. Stop
那么看来还是得执行 extract-bsp,
分析2.1)
sourcedevice/softwinner/common/vendorsetup.sh−sh:‘extract−bsp′:notavalididentifier那么改名为extractbsp好了。
source device/softwinner/common/vendorsetup.sh
extractbsp/home/6a918/a64/android/device/softwinner/tulip−p1/bImagecopied!/home/6a918/a64/android/device/softwinner/tulip−p1/modulescopied!
ls -l device/softwinner/tulip-p1/kernel
-rwxrwxr-x 1 a64 a64 11143328 Oct 9 15:38 device/softwinner/tulip-p1/kernel
好了,产生了, 那说明pack这些函数都是通过source 这些sh,在环境里面就能使用sh里面的函数了。
修改代码如下:
#20161009 byh function extract-bsp()
function extractbsp()
{
CURDIR=
PWDgetlicheeoutdirgetdevicedircd
DEVICE
#extract kernel
if [ -f kernel ] ; then
rm kernel
fi
cp
LINUXOUTDIR/bImagekernelecho“
DEVICE/bImage copied!”
#extract linux modules
if [ -d modules ] ; then
rm -rf modules
fi
mkdir -p modules/modules
cp -rf
LINUXOUTMODULEDIRmodules/modulesecho“
DEVICE/modules copied!”
chmod 0755 modules/modules/*
# create modules.mk
(cat << EOF) > ./modules/modules.mk
# modules.mk generate by extract-files.sh, do not edit it.
PRODUCT_COPY_FILES += \
$(call find-copy-subdir-files,*,$(LOCAL_PATH)/modules,system/vendor/modules)
EOF
cd $CURDIR
}
分析3) 编译android有错误make: No rule to make target externalromium_org/third_party/angle/.git/index', needed by
out/target/product/tulip-p1/obj/GYPd_intermediates/angle/id/commit.h’. Stop.*
那么应该注释掉
./src/commit_id.target.linux-arm64.mk:23:
(gypsharedintermediatedir)/angle/id/commit.h:
(gyp_shared_intermediate_dir)/angle/commit_id.py
(LOCALPATH)/thirdparty/angle/.git/index
(GYP_TARGET_DEPENDENCIES)
分析3.1) 另外一个同行说的
如果是自己通过repo和git直接从google官网上download的源码,请忽略这个问题,但是由于google在国内被限制登录,通过这一种方法不是每个人都能download下来源码,通常的做法就是从别人那拷贝,然后自己编译,那么通常会出现下面的错误:
No rule to make target 'external/chromium_org/third_party/angle/.git/index', need by .....
进入相应的目录,发现在angle目录下根本没有.git的目录,这个也可以理解,因为不是自己通过repo和git直接从官网download,所以没有.git目录(这个目录是git的管理目录,跟.svn的作用一样)。因此我们只有一个办法,就是不让源码编译.git/index的部分。
具体修改如下:
将external/chromium_org/third_party/angle/src/commit_id.target.linux-arm.mk文件中关于index的部分注释掉:
原始部分(原始文件中下面绿色标出的部分写在了同一行)
......
$(gyp_shared_intermediate_dir)/angle/id/commit.h: $(gyp_shared_intermediate_dir)/angle/commit_id.py $(LOCAL_PATH)/third_party/angle/.git/index
$(GYP_TARGET_DEPENDENCIES)
......
改成
......
$(gyp_shared_intermediate_dir)/angle/id/commit.h: $(gyp_shared_intermediate_dir)/angle/commit_id.py
#$(LOCAL_PATH)/third_party/angle/.git/index$(GYP_TARGET_DEPENDENCIES)
......
这样就能让源码不编译.git下面的index部分,编译就能通过,亲测成功!
【a64】【调试计划-第一轮】
================
分析1) 电源发现用的是CONFIG_SUNXI_AXP81X
一。 移植步骤
一) 默认的bin文件能烧录
这个直接就可以
二) bootloader,linux,android能运行, 串口能显示,交互
详见上面pack
三) hdmi能显示
注意选p1, 然后用pack不用用pack -d,否则默认out里面生成的sysconfig。fex把p1的fex中的debug口改换了,串口不打印了。
PANEL-ON PD6
#define SUNXI_PINCTRL "sunxi-pinctrl"
#define SUNXI_BANK_SIZE 32
#define SUNXI_PA_BASE 0
#define SUNXI_PB_BASE 32
#define SUNXI_PC_BASE 64
#define SUNXI_PD_BASE 96
#define SUNXI_PE_BASE 128
#define SUNXI_PF_BASE 160
#define SUNXI_PG_BASE 192
#define SUNXI_PH_BASE 224
#define SUNXI_PI_BASE 256
#define SUNXI_PJ_BASE 288
#define SUNXI_PK_BASE 320
#define SUNXI_PL_BASE 352
#define SUNXI_PM_BASE 384
#define SUNXI_PN_BASE 416
#define AXP_PIN_BASE 1024
102
echo 0 > /sys/class/gpio/gpio102/value
hdmi出来了, 如果设成横屏1366x768,只有关机那个提示好的,有logo其他黑屏。
如果是设置720x1280,hdmi能显示竖着的一个手机。
没有触摸屏,那么把usb hub驱动起来, 这样好使用鼠标
insmod /vendor/modules/shinePadCtrl.ko;insmod /vendor/modules/shinePadCtrl_dev.ko;
cd /sys/bus/platform/drivers/shinepad_ctl/shinepad_ctl
echo “axp81x_gpio1ldo 3300 1” > option
echo “axp81x_gpio1ldo 3300 0” > option
PD
24@Y14 LVDS EP172复位信号
echo 120 > /sys/class/gpio/export
echo “out” > /sys/class/gpio/gpio120/direction
echo 0 > /sys/class/gpio/gpio120/value;ls;ls;echo 1 > /sys/class/gpio/gpio120/value;
hsic 1.2v给开开
cd /sys/bus/platform/drivers/shinepad_ctl/shinepad_ctl
echo “axp81x_fldo1 1200 1” > option
三) hdmi能显示横屏,全屏 20161012
分析1) 把lcd0的1280x800的所有参数都h,v旋转,那么在hdmi显示就是横屏了, 除了右边一小条基本就充满全屏了。
四) usb鼠标能用,进入桌面 20161014
//20161011
//发现hdmi目前是竖屏, 还是1080p, lvds,没有,主要是usb没有,这个很奇怪。
先搞定usb
没有触摸屏,那么把usb hub驱动起来, 这样好使用鼠标
insmod /vendor/modules/shinePadCtrl.ko;insmod /vendor/modules/shinePadCtrl_dev.ko;
cd /sys/bus/platform/drivers/shinepad_ctl/shinepad_ctl
echo “axp81x_gpio1ldo 3300 1” > option
后来是kernel menuconfig里面
ehci1 ohci1 没有, 后来给加了就好了
因为只能看到锁屏的桌面,所以运行计算器
am start -n com.android.calculator2/com.android.calculator2.Calculator
发现没东西
###1. 开机不锁屏
2.禁止锁屏
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
false 改为 true;即默认禁止锁屏
然后给设置成600秒,才进入休眠看看效果
<integer name="def_screen_off_timeout">600000</integer>
注意allwin增加了hdmi相關的部分,其中hdmi輸出為默認1080p
<!-- add by allwinner:hdmi -->
<integer name="def_bright_system">0</integer>
<integer name="def_brightness_light">1</integer>
<bool name="def_display_adation_enable">true</bool>
<integer name="def_hdmi_output_mode">10</integer>
<integer name="def_hdmi_full_screen">0</integer>
<integer name="def_hdmi_persent">25700</integer>
分别编译frameworks/base/packages/SettingsProvider 与 frameworks/base
编译后push 到 system/priv-app/SettingsProvider/SettingsProvider.apk system/framework/framework.jar
删去机器中对应的oat目录。重启或恢复出厂设置。第一次开机时,会先出现status bar,launcher要等一会才出来。
之后重启就可以直接进入launcher。机器会默认不锁屏。但还是会进入sleep状态。
文/RustFisher(简书作者)
原文链接:http://www.jianshu.com/p/fdd2a0aabd23
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
###2. bootloader支持setcfg
#if 120161011 byh
#define CONFIG_CMD_MODIFY_SYSCONFIG
#else
//#define CONFIG_CMD_MODIFY_SYSCONFIG
#endif
//20161011 byh bootdelay from 0 to 3
#define CONFIG_SUNXI_SPRITE_ENV_SETTINGS \
"bootdelay=3\0" \
在cmd_modify_sysconfig (1).c
#if 1//20161011 byh
#include <sys_config_old.h>
typedef struct
{
char gpio_name[32];
int port;
int port_num;
int mul_sel;
int pull;
int drv_level;
int data;
} script_gpio_set_t;
#else
#include <sys_config.h>
#endif
五) lvds-1366屏能正常输出,能显示横屏全屏和竖屏全屏 20161014
分析1) 如何读取寄存器呢, 应该是0地址返回0x0e,
TWI1:PH2/SCK,PH3/SDA
//PANEL ON
echo 102 > /sys/class/gpio/export
echo “out” > /sys/class/gpio/gpio102/direction
echo 1 > /sys/class/gpio/gpio102/value
cd /vendor/modules
insmod ep172_drv.ko;insmod ep172_dev.ko;
//num 1 0xf30cff00
echo -e “\x11\x00\x00\x00” > /dev/ep172
返回值
# echo -e “\x11\x00\x00\x00” > /dev/ep172
76.203146] copy_from_user OK type 0x11 addrsize 0x00 datasize 0x00 data 0x000affffff count 5
[ 76.213135] sizeof 1 2 4 unsigned 4
[ 76.221477] sunxi_i2c_do_xfer()902 - [i2c1] incomplete xfer (status: 0x20, dev addr: 0x70)
[ 76.231258] i2c_smbus_read_byte_data OK ret 0xffffffba
0x0111_000 7位, 应该不是0x70,0x71, 后来发现是0x38
shell@tulip-p1:/vendor/modules # echo -e “\x11\x00\x00\x00” > /dev/ep172
[ 188.126091] copy_from_user OK type 0x11 addrsize 0x00 datasize 0x00 data 0x000affffff count 5
[ 188.137141] sizeof 1 2 4 unsigned 4
[ 188.142750] i2c_smbus_read_byte_data OK ret 0x000e
这个寄存器默认值也是对的
shell@tulip-p1:/vendor/modules # echo -e “\x11\x01\x01\x04\x00” > /dev/ep172
[ 163.875225] copy_from_user OK type 0x11 addrsize 0x01 datasize 0x01 data 0x04000affff count 6
[ 163.886435] sizeof 1 2 4 unsigned 4
[ 163.891950] i2c_smbus_read_byte_data OK ret 0x0085
技术支持的建议是
而且我发现一个问题, 就是默认的代码不会进到dx0960be40a1.c的cfg_open_flow,
休眠唤醒之后才会进去
你要在uboot也添加
echo “axp81x_dc1sw 3300 1” > option
ep172寄存器默认的值
echo -e “\x11\x00\x00\x00” > /dev/ep172
0x000e
echo -e “\x11\x00\x00\x04” > /dev/ep172
0x0085
echo -e “\x11\x00\x00\x06” > /dev/ep172
0x0000
echo -e “\x11\x00\x00\x07” > /dev/ep172
0x0000
echo -e “\x11\x00\x00\x8b” > /dev/ep172
0x0040
echo -e “\x11\x00\x00\x8c” > /dev/ep172
0x0000
echo -e “\x11\x00\x00\x8d” > /dev/ep172
0x0000
echo -e “\x11\x00\x00\x8e” > /dev/ep172
0x0000
echo -e “\x11\x00\x00\x8f” > /dev/ep172
0x0000
echo -e “\x11\x00\x00\x90” > /dev/ep172
0x0000
echo -e “\x11\x00\x00\x91” > /dev/ep172
0x0000
echo -e “\x11\x00\x00\x92” > /dev/ep172
0x0000
echo -e “\x11\x00\x00\x93” > /dev/ep172
0x0058
echo -e “\x11\x00\x00\x94” > /dev/ep172
0x0000
echo -e “\x11\x00\x00\x95” > /dev/ep172
0x002c
echo -e “\x11\x00\x00\x96” > /dev/ep172
0x0000
echo -e “\x11\x00\x00\x97” > /dev/ep172
0x0094
echo -e “\x11\x00\x00\x98” > /dev/ep172
0x0000
echo -e “\x11\x00\x00\x99” > /dev/ep172
0x0000
echo -e “\x11\x00\x00\x9a” > /dev/ep172
0x0004
echo -e “\x11\x00\x00\x9b” > /dev/ep172
0x0005
echo -e “\x11\x00\x00\x9c” > /dev/ep172
0x0024
后来发现有时候hdmi不显示疯狂打印 hwc force flip disp[1]:836 这个。
这次是后来正常出来的日志,必须把电断干净可以。正好是我reset网卡结果网卡也有了,hdmi也有了
[ 59.322767] hwc force flip disp[1]:837
shell@tulip-p1:/ #
shell@tulip-p1:/ # [ 59.372204] hwc force flip disp[1]:838
shell@tulip-p1:/ # [ 59.422233] hwc force flip disp[1]:839
shell@tulip-p1:/ #
shell@tulip-p1:/ # [ 59.472304] hwc force flip disp[1]:840
shell@tulip-p1:/ #
[ 59.522400] hwc force flip disp[1]:841
shell@tulip-p1:/ #
shell@tulip-p1:/ # [ 59.572357] hwc force flip disp[1]:842
shell@tulip-p1:/ # [ 59.622367] hwc force flip disp[1]:843
[ 59.672344] hwc force flip disp[1]:844
[ 59.678739] acc_open
[ 59.681161] acc_release
[ 59.722458] hwc force flip disp[1]:845
[ 59.772585] hwc force flip disp[1]:846
[ 59.822740] hwc force flip disp[1]:847
[ 59.872592] hwc force flip disp[1]:848
[ 59.908447] axp81x_dldo2: Failed to create debugfs directory
[ 59.918960] axp81x_eldo2: Failed to create debugfs directory
[ 59.922441] hwc force flip disp[1]:849
[ 59.932827] axp81x_fldo1: Failed to create debugfs directory
[ 59.972563] hwc force flip disp[1]:850
[ 60.022524] hwc force flip disp[1]:851
[ 60.056118] hwc force flip disp[1]:852
[ 60.105844] hwc force flip disp[1]:853
[ 60.155916] hwc force flip disp[1]:854
[ 60.205933] hwc force flip disp[1]:855
[ 60.251904] libphy: 1c30000.eth: probed
[ 60.256253] hwc force flip disp[1]:856
[ 60.287221] sunxi-gmac 1c30000.eth eth0: eth0: PHY ID 001cc816 at 0 IRQ poll (1c30000.eth-0:00)
[ 60.306062] hwc force flip disp[1]:857
[ 60.356190] hwc force flip disp[1]:858
[ 60.406483] hwc force flip disp[1]:859
[ 60.453990] ++++++++++++++++++++++++++-66479576 1212 duty_ns 8047 period_ns 20000
[ 60.463593] disp_runtime_resume
[ 60.463800] [DISP] disp_sys_pwm_config,line:580:disp_sys_pwm_Config pwm 0, <8047 / 20000>
[ 60.468033] ++++++++++++++++++++++++++-66479576 1212 duty_ns 7827 period_ns 20000
[ 60.468042] [DISP] disp_sys_pwm_config,line:580:disp_sys_pwm_Config pwm 0, <7827 / 20000>
[ 60.484606] ++++++++++++++++++++++++++-66479576 1212 duty_ns 7638 period_ns 20000
[ 60.484617] [DISP] disp_sys_pwm_config,line:580:disp_sys_pwm_Config pwm 0, <7638 / 20000>
[ 60.501172] ++++++++++++++++++++++++++-66479576 1212 duty_ns 7481 period_ns 20000
[ 60.501184] [DISP] disp_sys_pwm_config,line:580:disp_sys_pwm_Config pwm 0, <7481 / 20000>
[ 60.517749] ++++++++++++++++++++++++++-66479576 1212 duty_ns 7324 period_ns 20000
###1. 如何充满全屏?
lcd_backlight = 50
lcd_if = 4
lcd_x = 1280
;800
lcd_y = 800
;1280
lcd_width = 206
;129
lcd_height = 129
;206
lcd_dclk_freq = 103
;103
lcd_pwm_used = 1
lcd_pwm_ch = 0
lcd_pwm_freq = 50000
lcd_pwm_pol = 1
lcd_pwm_max_limit = 250
lcd_hbp = 256 //如果这个值很小,比如24,那么lvds转vga后就会左边200多个像素看不到,然后右边空了200多个像素黑的
;24
;60
lcd_ht = 1600 如果lcd_hbp+lcd_x 。。。》lcd_ht 那么uboot直接死掉不动,
;1300
lcd_hspw = 16
;20
lcd_vbp = 60
;21
lcd_vt = 900 之前设置1300,会导致到屏幕中下部就显示完了,再以下就都是黑的。
;1332
lcd_vspw = 20
;10
###2. 发现能让1366x768 屏出来的配置如下:
lcd_backlight = 50
lcd_if = 4
lcd_x = 1366
;800
lcd_y = 768
;1280
lcd_width = 206
;129
lcd_height = 129
;206
lcd_dclk_freq = 103
;103
lcd_pwm_used = 1
lcd_pwm_ch = 0
lcd_pwm_freq = 50000
lcd_pwm_pol = 1
lcd_pwm_max_limit = 250
lcd_hbp = 180
;24
;60
lcd_ht = 1600
;1300
lcd_hspw = 16
;20
lcd_vbp = 60
;21
lcd_vt = 900
;1332
lcd_vspw = 20
但是如果插着hdmi,那么一直停在logo图报错, 好像因为hdmi不支持这样的分辨率。
如果不插入hdmi,那么lvds会一直进入到桌面,但是会闪,也有问题。
如果是1280x720, lvds转vga是正常的, 但是lvds1366屏不显示,查logcat如下
01-01 10:00:58.845 E/AndroidRuntime(12727): Process: com.android.systemui, PID: 12727
01-01 10:00:58.845 E/AndroidRuntime(12727): java.lang.NullPointerException: Attempt to invoke virtual method ‘void android.view.View.setVisibility(int)’ on a null object reference
01-01 10:00:58.845 E/AndroidRuntime(12727): at com.android.systemui.statusbar.phone.NavigationBarView.setDisabledFlags(NavigationBarView.java:390)
01-01 10:00:58.845 E/AndroidRuntime(12727): at com.android.systemui.statusbar.phone.NavigationBarView.notifyScreenOn(NavigationBarView.java:308)
01-01 10:00:58.845 E/AndroidRuntime(12727): at com.android.systemui.statusbar.phone.PhoneStatusBar.notifyNavigationBarScreenOn(PhoneStatusBar.java:1211)
01-01 10:00:58.845 E/AndroidRuntime(12727): at com.android.systemui.statusbar.phone.PhoneStatusBar.access
6600(PhoneStatusBar.java:187)01−0110:00:58.845E/AndroidRuntime(12727):atcom.android.systemui.statusbar.phone.PhoneStatusBar
38.onReceive(PhoneStatusBar.java:3144)
01-01 10:00:58.845 E/AndroidRuntime(12727): at com.android.systemui.statusbar.phone.PhoneStatusBar.makeStatusBarView(PhoneStatusBar.java:922)
01-01 10:00:58.845 E/AndroidRuntime(12727): at com.android.systemui.statusbar.phone.PhoneStatusBar.addStatusBarWindow(PhoneStatusBar.java:3047)
01-01 10:00:58.845 E/AndroidRuntime(12727): at com.android.systemui.statusbar.phone.PhoneStatusBar.createAndAddWindows(PhoneStatusBar.java:3043)
01-01 10:00:58.845 E/AndroidRuntime(12727): at com.android.systemui.statusbar.BaseStatusBar.start(BaseStatu[ 123.271545] binder: 8587:8587 transaction failed 29189, size 84-0
sBar.java:562)
01-01 10:00:58.845 E/AndroidRuntime(12727): at com.android.systemui.statusbar.phone.PhoneStatusBar.start(PhoneStatusBar.java:588)
01-01 10:00:58.845 E/AndroidRuntime(12727): at com.android.systemui.statusbar.SystemBars.createStatusBarFromConfig(SystemBars.java:106)
01-01 10:00:58.845 E/AndroidRuntime(12727): at com.android.systemui.statusbar.SystemBars.onNoService(SystemBars.java:58)
01-01 10:00:58.845 E/AndroidRuntime(12727): at com.android.systemui.statusbar.ServiceMonitor.startService(ServiceMonitor.java:228)
01-01 10:00:58.845 E/AndroidRuntime(12727): at com.android.systemui.statusbar.ServiceMonitor.access
000(ServiceMonitor.java:49)01−0110:00:58.845E/AndroidRuntime(12727):atcom.android.systemui.statusbar.ServiceMonitor
1.handleMessage(ServiceMonitor.java:73)
01-01 10:00:58.845 E/AndroidRuntime(12727): at android.os.Handler.dispatchMessage(Handler.java:102)
01-01 10:00:58.845 E/AndroidRuntime(12727): at android.os.Looper.loop(Looper.java:135)
01-01 10:00:58.845 E/AndroidRuntime(12727): at android.app.ActivityThread.main(ActivityThread.java:5254)
01-01 10:00:58.845 E/AndroidRuntime(12727): at java.lang.reflect.Method.invoke(Native Method)
01-01 10:00:58.845 E/AndroidRuntime(12727): at java.lang.reflect.Method.invoke(Method.java:372)
01-01 10:00:58.845 E/AndroidRuntime(12727): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:920)
01-01 10:00:58.845 E/AndroidRuntime(12727): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:715)
01-01 10:00:58.849 I/Process (12727): Sending signal. PID: 12727 SIG: 9
01-01 10:00:58.866 V/KeyguardServiceDelegate( 8587): * Keyguard started
后来在文件NavigationBarView.java 加了如下,好了,终于不只是看见鼠标,进了桌面了,使用计算器正常
if(mContext.getResources().getBoolean(R.bool.hasVolumeButton)) {
Log.d(TAG, "setDisabledFlags don't do setVisibility");//20161016 byh begin
//20161016 byh begin getVolumeDownButton().setVisibility(disableHome ? View.INVISIBLE : View.VISIBLE);
//20161016 byh begin getVolumeUpButton().setVisibility(disableHome ? View.INVISIBLE : View.VISIBLE);
}
3.很奇怪把1080调好的屏参回到1366屏又不好使了,dumpsys windows是1366,但是172采集到的还是1920, 后来把sysconfig设置1366重新编译一下好了。
说明代码改的可以改vt,vh, 但是lcdx,lcdy这个还是编译的时候觉得的,mipi的timming部分还是读的编译的,而不是disp_config 那里。咱们的目标是sys_config改了之后,savecfg就能起作用,
这块可能得细查,怀疑在uboot里面drivers/video/sunxi/disp2/disp/disp_sys_intf.c
#if 1//20161021 byh
#include "sys_config_old.h"
#endif
/* returns: 0:invalid, 1: int; 2:str, 3: gpio */
int disp_sys_script_get_item(char *main_name, char *sub_name, int value[], int count)
{
int ret, retcode = 0;
user_gpio_set_t gpio_info;
disp_gpio_set_t *gpio_list;
script_parser_value_type_t type;
printf("disp_sys_script_get_item %s.%s begin\n", main_name, sub_name);
ret = script_parser_fetch_ex(main_name, sub_name, value, &type, count);
if(ret < 0) {
retcode = 0;//invalid
//__wrn("fetch script data %s.%s fail\n", main_name, sub_name);
printf("fetch script data %s.%s fail\n", main_name, sub_name);
} else {
if(type == SCIRPT_PARSER_VALUE_TYPE_SINGLE_WORD) {
retcode = 1;//int
//__inf("%s.%s = %d\n", main_name, sub_name, *value);
printf("%s.%s = %d\n", main_name, sub_name, *value);
} else if(type == SCIRPT_PARSER_VALUE_TYPE_GPIO_WORD) {
retcode = 3;//gpio
memcpy(&gpio_info, value, sizeof(user_gpio_set_t));
gpio_list = (disp_gpio_set_t *)value;
gpio_list->port = gpio_info.port;
gpio_list->port_num = gpio_info.port_num;
gpio_list->drv_level = gpio_info.drv_level;
gpio_list->pull = gpio_info.pull;
gpio_list->data = gpio_info.data;
//__inf("%s.%s gpio_port=%d,gpio_port_num:%d, data:%d\n",main_name, sub_name, gpio_list->port, gpio_list->port_num, gpio_list->data);
printf("%s.%s gpio_port=%d,gpio_port_num:%d, data:%d\n",main_name, sub_name, gpio_list->port, gpio_list->port_num, gpio_list->data);
} else if(type == SCIRPT_PARSER_VALUE_TYPE_STRING) {
retcode = 2;//str
//__inf("%s.%s = %s\n", main_name, sub_name, (char*)value);
printf("%s.%s = %s\n", main_name, sub_name, (char*)value);
}
}
return retcode;
}
六) rj45 20161018 –给到多媒体组移植多媒体程序,测试软件兼容性和稳定性
PD4 是reset,拉低10ms
echo 100 > /sys/class/gpio/export
echo “out” > /sys/class/gpio/gpio100/direction
echo 0 > /sys/class/gpio/gpio100/value
pwd
echo 1 > /sys/class/gpio/gpio100/value
然后也不insmod了, 因为环境默认定义了CONFIG_OF, 没有resource,这个都不知道GETH_BASE,
没法insmod。 所以把Makefile改回去。
看看sun50iw1p1.dtsi里面gmac 的status = “okay”;phy-mode = “rmii”; 是否能出来
日志终于出来了
[ 12.966345] geth_probe(1823)
[ 12.969558] geth_probe(1834)
[ 12.972699] geth_probe(1840)
[ 12.975855] geth_probe(1845)
[ 12.979042] WARNING: Get ephy clock is failed
[ 12.983798] geth_probe(1850)
[ 12.986938] geth_probe(1857)
[ 12.990100] geth_probe(1865)
[ 12.993241] geth_probe(1875)
[ 12.996422] geth_probe(1883)
[ 12.999570] geth_probe(1891)
[ 13.002710] geth_probe(1900)
[ 13.005850] geth_probe(1909)
[ 13.008998] geth_probe(1916)
[ 13.013101] geth_probe(1927)
[ 13.016242] geth_probe(1934)
看来还是会通过dtsi会找到gmac及对应的驱动的, 里面status = “okay”;之前是disable那肯定不会启动网卡了。 然后因为硬件测量没有reset没有50M的clock, 后来reset就有50M了, 对应打印可能是在和rtl8201
通信了,主要是看clock, 一看clock不对,不行。
那么reset clock,插拔一下网线, 发现eth0有了,还通过dhcp分配了192.168的ip,
那说明工作了。
后来设置静态ip能通了, 能访问局域网,ping不通百度, 可能dns 缘故。
技术支持: 你再看看休眠唤醒有没有问题。 这个可能是有问题,因为目前深度睡眠,先不管这个了。
你先按电源键试试
root@cube-smart:/sys/power # echo standby > state
如果没有reset
shell@tulip-p1:/vendor/modules # [ 193.360379] axp81x_dldo2: Failed to create debugfs directory
[ 193.369677] axp81x_eldo2: Failed to create debugfs directory
[ 193.379210] axp81x_fldo1: Failed to create debugfs directory
[ 193.696413] libphy: 1c30000.eth: probed
[ 193.700614] sunxi-gmac 1c30000.eth eth0: No PHY found!
[ 193.724303] binder: undelivered transaction 44469
[ 193.724854] alarm_release: clear alarm, pending 0
[ 193.736103] binder: 1543:1612 transaction failed 29189, size 68-0
好像软件reboot不行,必须断电重启, rj45才能有, hdmi也才能有。
好像得网卡reset 工作了,才能resume, display才工作。
busybox ifconfig eth0 10.0.1.93 netmask 255.255.255.0 up
busybox route add default gw 10.0.1.1
setprop net.dns1 202.106.0.20
setprop net.eth0.dns1 202.106.0.20
七)lvds-1080屏能正常输出,能显示横屏全屏和竖屏全屏 20161024
发现把1366的屏参放到1080p上也能显示, 当然MapMode也得改一下 0x81。 发现数据好像有些地方看不到。
但是应该是Dual Port, 那就把 也改一下 Lvds mode,echo -e “\x12\x00\x00\x04\x89” > /dev/ep172
那发现屏幕数据一下子多了好几个被压缩的感觉,每个都是能看到全的。
改sysconfig,用给的1920x1200的这块会卡到dsi clock
lcd_hbp = 25
lcd_ht = 1981
lcd_hspw = 3
lcd_vbp = 64
lcd_vt = 1341
lcd_vspw = 5
改成这个不会在uboot卡到dsi clock这里
lcd_hbp = 24
lcd_ht = 2080
lcd_hspw = 4
lcd_vbp = 64
lcd_vt = 1440
lcd_vspw = 4
lvds端测试帧速率 如果dsiclk是145 实际测试 60
如果dsiclk是195 实际测试 80.5
然后1080p虽然有了,但是双屏异显不行,后来发现demo板有hdmi plugin的东西,
然后把hdmi插拔一下就好了,再使用多少次都好用。
注意这个是可以的,一个app回到主界面就舒服很多
lcd_hbp = 60
lcd_ht = 2200
lcd_hspw = 10
lcd_vbp = 24
lcd_vt = 1230
lcd_vspw = 8
但是
lcd_hbp = 60
lcd_ht = 2150 –闪的不行,数据不够的样子
lcd_hspw = 10
lcd_vbp = 24
lcd_vt = 1230
lcd_vspw = 8
八) sysconfig在kernel下可以读取, 支持shell脚本开机加载,开机支持调用sh脚本init.shine.sh
1. 1最终的dtb在哪里
2.2目前只能是先让lcd0下面的都读sysconfig,而不是去读dtb, 这个得测试一下,
在文件disp_sys_intf.c中
#if 1//20161019 byh
/* returns: 0:invalid, 1: int; 2:str, 3: gpio */
int disp_sys_script_get_item(char *main_name, char *sub_name, int value[], int count)
{
script_item_u val;
script_item_value_type_e type;
int ret = -1;
type = script_get_item(main_name, sub_name, &val);
if(SCIRPT_ITEM_VALUE_TYPE_INT == type) {
ret = 0;
*value = val.val;
__inf("%s.%s=%d\n", main_name, sub_name, *value);
} else if(SCIRPT_ITEM_VALUE_TYPE_PIO == type) {
disp_gpio_set_t *gpio_info = (disp_gpio_set_t *)value;
ret = 0;
gpio_info->gpio = val.gpio.gpio;
gpio_info->mul_sel = val.gpio.mul_sel;
gpio_info->pull = val.gpio.pull;
gpio_info->drv_level = val.gpio.drv_level;
gpio_info->data = val.gpio.data;
memcpy(gpio_info->gpio_name, sub_name, strlen(sub_name)+1);
__inf("%s.%s gpio=%d,mul_sel=%d,data:%d\n",main_name, sub_name, gpio_info->gpio, gpio_info->mul_sel, gpio_info->data);
} else if(SCIRPT_ITEM_VALUE_TYPE_STR == type) {
memcpy((void*)value, (void*)val.str, strlen(val.str)+1);
__inf("%s.%s=%s\n",main_name, sub_name, val.str);
} else {
ret = -1;
__inf("fetch script data %s.%s fail\n", main_name, sub_name);
}
return type;
}
#else
/* type: 0:invalid, 1: int; 2:str, 3: gpio */
int disp_sys_script_get_item(char *main_name, char *sub_name, int value[], int type)
{
char compat[32];
u32 len = 0;
struct device_node *node;
int ret = 0;
struct gpio_config config;
len = sprintf(compat, "allwinner,sunxi-%s", main_name);
if (len > 32)
__wrn("size of mian_name is out of range\n");
node = of_find_compatible_node(NULL, NULL, compat);
if (!node) {
__wrn("of_find_compatible_node %s fail\n", compat);
return ret;
}
if (1 == type) {
if (of_property_read_u32_array(node, sub_name, value, 1))
__inf("of_property_read_u32_array %s.%s fail\n", main_name, sub_name);
else
ret = type;
} else if (2 == type) {
const char *str;
if (of_property_read_string(node, sub_name, &str))
__inf("of_property_read_string %s.%s fail\n", main_name, sub_name);
else {
ret = type;
memcpy((void*)value, str, strlen(str)+1);
}
} else if (3 == type) {
disp_gpio_set_t *gpio_info = (disp_gpio_set_t *)value;
int gpio;
gpio = of_get_named_gpio_flags(node, sub_name, 0, (enum of_gpio_flags *)&config);
if (!gpio_is_valid(gpio))
goto exit;
gpio_info->gpio = config.gpio;
gpio_info->mul_sel = config.mul_sel;
gpio_info->pull = config.pull;
gpio_info->drv_level = config.drv_level;
gpio_info->data = config.data;
memcpy(gpio_info->gpio_name, sub_name, strlen(sub_name)+1);
__inf("%s.%s gpio=%d,mul_sel=%d,data:%d\n",main_name, sub_name, gpio_info->gpio, gpio_info->mul_sel, gpio_info->data);
ret = type;
}
exit:
return ret;
}
#endif
EXPORT_SYMBOL(disp_sys_script_get_item);
3.3开机支持调用sh脚本init.shine.sh
参照918
1|shell@tulip-p1:/ #
1|shell@tulip-p1:/ #
1|shell@tulip-p1:/ # cat /proc/kmsg | grep avc
<36>[ 20.448660] type=1400 audit(1262317717.690:3): avc: denied { execute_no_trans } for pid=1547 comm=”sh” path=”/system/bin/sh” dev=”mmcblk0p7” ino=296 scontext=u:r:init_shell:s0 tcontext=u:object_r:shell_exec:s0 tclass=file permissive=0
解决:
external/sepolicy/init_shell.te 增加如下:
allow init_shell shell_exec:file execute_no_trans;
shell@tulip-p1:/ #
shell@tulip-p1:/ # [ 29.671268] codec_aif_mute mute = 1 spkenable = 1
shell@tulip-p1:/ # [ 30.272573] type=1400 audit(1262324178.660:4): avc: denied { search } for pid=1548 comm=”shine_exec.sh” name=”/” dev=”fuse” ino=0 scontext=u:r:init_shell:s0 tcontext=u:object_r:fuse:s0 tclass=dir permissive=1
[ 30.293261] type=1400 audit(1262324178.660:5): avc: denied { write } for pid=1548 comm=”shine_exec.sh” name=”0” dev=”fuse” ino=1 scontext=u:r:init_shell:s0 tcontext=u:object_r:fuse:s0 tclass=dir permissive=1
[ 30.313806] type=1400 audit(1262324178.660:6): avc: denied { add_name } for pid=1548 comm=”shine_exec.sh” name=”123” scontext=u:r:init_shell:s0 tcontext=u:object_r:fuse:s0 tclass=dir permissive=1
[ 30.333189] type=1400 audit(1262324178.660:7): avc: denied { create } for pid=1548 comm=”shine_exec.sh” name=”123” scontext=u:r:init_shell:s0 tcontext=u:object_r:fuse:s0 tclass=file permissive=1
[ 30.352294] type=1400 audit(1262324178.660:8): avc: denied { write } for pid=1548 comm=”shine_exec.sh” name=”123” dev=”fuse” ino=2 scontext=u:r:init_shell:s0 tcontext=u:object_r:fuse:s0 tclass=file permissive=1
[ 30.372921] type=1400 audit(1262324178.660:9): avc: denied { open } for pid=1548 comm=”shine_exec.sh” path=”/mnt/shell/emulated/0/123” dev=”fuse” ino=2 scontext=u:r:init_shell:s0 tcontext=u:object_r:fuse:s0 tclass=file permissive=1
shell@tulip-p1:/ #
shell@tulip-p1:/ # [ 31.246164] init: Warning! Service sensors needs a SELinux domain defined; please fix!
[ 31.255504] init: starting ‘sensors’
shell@tulip-p1:/ #
shell@tulip-p1:/ # [ 31.771381] lowmemorykiller: lowmem_shrink: convert oom_adj to oom_score_adj:
[ 31.779293] lowmemorykiller: oom_adj 0 => oom_score_adj 0
[ 31.785196] lowmemorykiller: oom_adj 1 => oom_score_adj 58
[ 31.791198] lowmemorykiller: oom_adj 2 => oom_score_adj 117
battery none chg=au
[ 24.459983] warning: `Thread-7’ uses 32-bit capabilities (legacy support in use)
[ 25.582438] [sw_udc]: nuke: ep num is 0
[ 28.443635] init: untracked pid 1543 exited with status 0
[ 28.447193] type=1400 audit(1262326581.750:3): avc: denied { execute } for pid=2203 comm=”shine_exec.sh” name=”shine_daemon.sh” dev=”mmcblk0p1” ino=15 scontext=u:r:init_shell:s0 tcontext=u:object_r:system_data_file:s0 tclass=file permissive=0
[ 28.473850] init: untracked pid 2203 exited with status 126
[ 28.539881] CPU Budget:update CPU 0 cpufreq max to 1008000 min to 480000
25.203218] init: before init.shine.sh
[ 25.218817] init: after init.shine.sh
[ 25.300847] type=1400 audit(1262328610.640:6): avc: denied { dac_override } for pid=1940 comm=”surfaceflinger” capability=1 scontext=u:r:surfaceflinger:s0 tcontext=u:r:surfaceflinger:s0 tclass=capability permissive=0
[ 25.322244] type=1400 audit(1262328610.640:7): avc: denied { dac_override } for pid=1940 comm=”surfaceflinger” capability=1 scontext=u:r:surfaceflinger:s0 tcontext=u:r:surfaceflinger:s0 tclass=capability permissive=0
[ 25.343671] type=1400 audit(1262328610.670:8): avc: denied { net_admin } for pid=1947 comm=”surfaceflinger” capability=12 scontext=u:r:surfaceflinger:s0 tcontext=u:r:surfaceflinger:s0 tclass=capability permissive=0
[ 25.584236] surfaceflinger[1940]: unhandled level 1 translation fault (11) at 0x00000000, esr 0x92000005
[ 25.594677] pgd = ffffffc0238b3000
[ 25.598419] [00000000] *pgd=0000000000000000
后来,insmod不可以,那么直接搞吧
service shinescript /system/bin/init.shine.sh
class main
user root
oneshot
这样insmod就可以了, init.shine.sh内容如下
#!/system/bin/sh
/system/etc/shine_exec.sh &
然后
可能权限问题会导致不能执行data下面的脚本,这个没细查。
九) 背光
patch
照着patch做就可以了, 但是我这个21寸屏的背光电路不好使。
注意uboot,kernel,tools都得做,要不然会出现莫名其妙的问题。
pwm选的是16,请注意。
十) rtc
1. menuconfig 里面加上 isl1208
2. 把r16的rtc-isl1208.c直接移植过来
busybox date -s "2016-10-21 11:34:00"
//read
busybox hwclock -f /dev/rtc0
//write
busybox hwclock -f /dev/rtc0 -w
十一) uart
1.之前a33的uart1的rx不好用,tx好用;uart的rx,tx都好用。
cat /proc/tty/drives/uart 中断也都有。
写了一个demo, uart设置port,baudrate, 同时读写
testSerialConsole_Android 1 9600, 发现就好使了
2.后来a64发现这边串口转接线反了,可是只有uart4的rxtx有,uart3一个都没有,但是中断有。怀疑是端口复用,
uart3_tx = port:PD00<3><1><default><default>
uart3_rx = port:PD01<3><1><default><default>
之前是2,是lcd的语义,现在改为3,才是uart,试试看。果然解决。
十二) gpio
之前是 UART1
PG6/PG7@
AB17/U23
GPIO BT-UART
#define SUNXI_PG_BASE 192
10 echo 198 > /sys/class/gpio/export
11 echo “out” > /sys/class/gpio/gpio198/direction
//5v
12 echo 0 > /sys/class/gpio/gpio198/value
//0v
13 echo 1 > /sys/class/gpio/gpio198/value
echo 199 > /sys/class/gpio/export
echo “in” > /sys/class/gpio/gpio199/direction
cat /sys/class/gpio/gpio199/value
十三) 红外
0. 把sys_config中的s_cir0打开才可以,
[s_cir0]
s_cir0_used = 1
ir_power_key_code = 0x10
ir_addr_code = 0x0
event也多了一项
add device 6: /dev/input/event0
name: “sunxi_ir_recv
1. 抓取打印信息,发现也是通过5.6ms,16.9ms来nec码来接收数据的。
2. 需要知道scancode映射的地方,
发现ir-nec-decoder.c中算出的客户码 0x00 0xff 0x0d 0xf2 和通过时序算出的ff004fb0不一样。
[ 202.753830] handle raw data.
[ 202.756972] ir_rx_irq_service: Rx FIFO Overflow!! 4fb0
[ 202.757315] NEC checksum error: received 0x00 0xff 0x0d 0xf2 0000 1101 1111 0010
[ 202.757317] NEC scancode 0x000d
[ 202.757319] NEC before rc_keydown scancode 0x000d
[ 202.757323] rc_map->len 255 scancode 0xd
[ 202.757326] rc_map->scan[mid].scancode 0xff7f mid 127
[ 202.757328] rc_map->scan[mid].scancode 0xff3f mid 63
[ 202.757330] rc_map->scan[mid].scancode 0xff1f mid 31
[ 202.757332] rc_map->scan[mid].scancode 0xff0f mid 15
[ 202.757334] rc_map->scan[mid].scancode 0xff07 mid 7
[ 202.757336] rc_map->scan[mid].scancode 0xff03 mid 3
[ 202.757337] rc_map->scan[mid].scancode 0xff01 mid 1
[ 202.757339] rc_map->scan[mid].scancode 0xff00 mid 0
[ 202.757342] sunxi_ir_recv: scancode 0x000d keycode 0x00
address = bitrev8((data->bits >> 24) & 0xff);
not_address = bitrev8((data->bits >> 16) & 0xff);
command = bitrev8((data->bits >> 8) & 0xff);
not_command = bitrev8((data->bits >> 0) & 0xff);
printk("NEC checksum error: received 0x%02x 0x%02x 0x%02x 0x%02x\n", address, not_address, command, not_command);
3. 那就需要将错就错,可是初始化scancode之前是2bytes,现在还是改回1个bytes,然后修改ir_lookup_by_scancode 令能匹配对应的scan的index
static void init_addr(u32 addr)
{
u32 i = 0;
#if 1//20161024 byh
u32 add_mask = 0;
#else
u32 add_mask = (addr & 0xff)<<8;
#endif
for(i = 0; i < ARRAY_SIZE(sunxi_nec_scan); i++){
sunxi_nec_scan[i].scancode |= add_mask;
}
return;
}
static unsigned int ir_lookup_by_scancode(const struct rc_map *rc_map,
unsigned int scancode)
{
int start = 0;
int end = rc_map->len - 1;
int mid;
printk("rc_map->len %d scancode 0x%x \n", rc_map->len, scancode);
#if 1//20161024 byh
for(mid=0;mid<rc_map->len;mid++)
{
printk("rc_map->len %d rc_map->scan[mid].scancode 0x%x mid %d\n", rc_map->len, rc_map->scan[mid].scancode, mid);
if (rc_map->scan[mid].scancode == scancode)
{
printk("ok rc_map->len %d rc_map->scan[mid].scancode 0x%x mid %d\n", rc_map->len, rc_map->scan[mid].scancode, mid);
return mid;
}
}
return -1U;
4.getevent看看是否能发回按键的信息
日志
394.176824] ir_rx_irq_service: Rx FIFO Overflow!!
[ 394.176884] NEC checksum error: received 0x00 0xff 0x0d 0xf2
[ 394.176886] NEC scancode 0x000d
[ 394.176888] NEC before rc_keydown scancode 0x000d
[ 394.176892] rc_map->len 255 scancode 0xd
[ 394.176895] rc_map->len 255 rc_map->scan[mid].scancode 0x0 mid 0
[ 394.176897] rc_map->len 255 rc_map->scan[mid].scancode 0x1 mid 1
[ 394.176899] rc_map->len 255 rc_map->scan[mid].scancode 0x2 mid 2
[ 394.176902] rc_map->len 255 rc_map->scan[mid].scancode 0x3 mid 3
[ 394.176904] rc_map->len 255 rc_map->scan[mid].scancode 0x4 mid 4
[ 394.176906] rc_map->len 255 rc_map->scan[mid].scancode 0x5 mid 5
[ 394.176908] rc_map->len 255 rc_map->scan[mid].scancode 0x6 mid 6
[ 394.176910] rc_map->len 255 rc_map->scan[mid].scancode 0x7 mid 7
[ 394.176913] rc_map->len 255 rc_map->scan[mid].scancode 0x8 mid 8
[ 394.176915] rc_map->len 255 rc_map->scan[mid].scancode 0x9 mid 9
[ 394.176918] rc_map->len 255 rc_map->scan[mid].scancode 0xa mid 10
[ 394.176920] rc_map->len 255 rc_map->scan[mid].scancode 0xb mid 11
[ 394.176922] rc_map->len 255 rc_map->scan[mid].scancode 0xc mid 12
[ 394.176924] rc_map->len 255 rc_map->scan[mid].scancode 0xd mid 13
[ 394.176927] ok rc_map->len 255 rc_map->scan[mid].scancode 0xd mid 13
[ 394.176931] sunxi_ir_recv: scancode 0x000d keycode 0x03
[ 394.176937] sunxi_ir_recv: key down event, key 0x0003, scancode 0x000d
好用了,之前只有2条,现在有5条
/dev/input/event0: 0004 0004 0000 0000d
/dev/input/event0: 0001 0003 00000001
/dev/input/event0: 0000 0000 00000000
[ 394.422568] keyup key 0x0003
/dev/input/event0: 0001 0003 00000000
/dev/input/event0: 0000 0000 00000000
十四) 摄像头
1. 没有电,强制初始化电,发现也不好使
ALDO1 2.8V/500mA off AFVCC-CSI,DOVDD-CSI,VCC-PE
DLDO3 2.8V/300mA off AVDD-CSI
ELDO3 1.8V/200mA off DVDD1V8-CSI
axp81x_aldo1
axp81x_dldo3
axp81x_eldo3
cd /sys/bus/platform/drivers/shinepad_ctl/shinepad_ctl
echo “axp81x_aldo1 2800 1” > option
echo “axp81x_dldo3 2800 1” > option
echo “axp81x_eldo3 1800 1” > option
echo -e “\x12\x00\x00\x00\x5e” > /dev/ep172
echo -e “\x12\x00\x00\x8b\x24” > /dev/ep172
echo -e “\x12\x00\x00\x04\x80” > /dev/ep172
2. 对比r16,发现是先不管2035的驱动,根本没有调用到[VFE]vfe sensor detect start! input_num = 0
看错误日志是如下:
[ 20.482049] [VFE_ERR]get regulator csi_flvdd error!
[ 20.482051] [VFE_ERR]vfe_device_regulator_get error at input_num = 0
说明电源的配置不对, 后来看到
csi0_dev0_flvdd = “vdd-csi-led”
csi0_dev0_flvdd_vol = 3300000
而vdd-csi-led被注释掉了,
;20161010 byh regulator9 = “axp81x_aldo1 none vdd-csi-led iovdd-csi ”
regulator9 = “axp81x_aldo1 none iovdd-csi ”
好,给改回来再看看。
regulator9 = “axp81x_aldo1 none vdd-csi-led iovdd-csi “
3. 之前老是没有电, 后来发现之前suspend,resume在a33驱动里面并没有开关摄像头的电源,只是操作pwdn,reset的gpio,改了这个试试
#if 1//20161110 byh
ret = v4l2_subdev_call(dev->sd,core, s_power, CSI_SUBDEV_STBY_ON);
#else
ret = vfe_set_sensor_power_off(dev);
#endif
4. 可是发现好像还是不行,internal_s_input老是提示dev_qty的错误
日志如下
if (i > dev->dev_qty-1) {
vfe_err(“set input i(%d)>dev_qty(%d)-1 error!\n”, i, dev->dev_qty);
先强制改为
if (i > dev->dev_qty-1) {
vfe_err("set input i(%d)>dev_qty(%d)-1 error!\n", i, dev->dev_qty);
#if 1//20161110 byh
vfe_err("set input i(%d)>dev_qty(%d)-1 error! dev->input %d force i = 0\n", i, dev->dev_qty, dev->input);
i = 0;
#else
return -EINVAL;
#endif
}
5. 后来可能和senserlist,isp_used 等有关系, 把这些都保持和a33一样
csi0_dev0_isp_used = 0
csi0_dev0_fmt = 0
csi0_dev0_stby_mode = 0
csi0_dev0_vflip = 1
csi0_dev0_hflip = 1
可是改了这些,会提示[VFE]cs/isp reset after csi/isp interrupt timeout! 并且发现并没有进入isr的中断处理程序里面。
6. 没进入中断函数vfe interrupt,i2c有通信,可能reset芯片后最好还是sensor_init里面把i2c初始化代码都做一遍看看,但其实之前a33不用每次都重新在sensor_init里面i2c重新初始化的
日志1: 使用摄像头resume,完整做过sensor_init的日志
396.786987] sensor_s_fmt chr wsize.width = [640], wsize.height = [480] info->hflip 1 info->vflip 1 sensor_fmt -64778736 force hflip
[ 396.802835] [CSI_ERR] [GC2035]sensor_s_hflip before sensor_write 0xfe value 1!
[ 396.812434]
[ 396.814064] [CSI_ERR] [GC2035]sensor_s_hflip before sensor_read!
[ 396.821417]
[ 396.823356] [CSI_DEBUG] [GC2035]sensor_read reg 0x17
[ 396.828983]
[ 396.832148] [CSI_DEBUG] [GC2035]sensor_read reg 0x17 after cci_read_a8_d8 ret 0
[ 396.840744]
[ 396.842471]
[ 396.844097] [CSI_DEBUG] [GC2035]sensor_read reg 0x17 end ret 0
[ 396.850992]
[ 396.852948] [CSI_ERR] [GC2035]sensor_s_vflip before sensor_read!
[ 396.859857]
[ 396.861494] [CSI_DEBUG] [GC2035]sensor_read reg 0x17
[ 396.867311]
[ 396.869473] [CSI_DEBUG] [GC2035]sensor_read reg 0x17 after cci_read_a8_d8 ret 0
[ 396.878125]
[ 396.879757]
[ 396.881535] [CSI_DEBUG] [GC2035]sensor_read reg 0x17 end ret 0
[ 396.888269]
[ 396.890149] csi->frame_info.frm_byte_size = 460800
[ 396.896067] [VFE]queue_setup, buffer count=8, size=460800
[ 396.958597] [VFE]capture video mode!
[ 396.997987] [VFE]capture video first frame done!
[ 397.041723] alloc_contig_range test_pages_isolated(72c
日志2: 使用摄像头resume,没完整做过sensor_init的日志
[ 55.178053] sensor_s_fmt chr wsize.width = [640], wsize.height = [480] info->hflip 1 info->vflip 1 sensor_fmt -64778720 force hflip
[ 55.192441] [CSI_ERR] [GC2035]sensor_s_hflip before sensor_write 0xfe value 1!
[ 55.200742]
[ 55.202990] [CSI_ERR] [GC2035]sensor_s_hflip before sensor_read!
[ 55.209595]
[ 55.211258] [CSI_DEBUG] [GC2035]sensor_read reg 0x17
[ 55.217008]
[ 55.218799] [CSI_DEBUG] [GC2035]sensor_read reg 0x17 after cci_read_a8_d8 ret 0
[ 55.227448]
[ 55.229293]
[ 55.230933] [CSI_DEBUG] [GC2035]sensor_read reg 0x17 end ret 0
[ 55.237570]
[ 55.239206] [CSI_ERR] [GC2035]sensor_s_vflip before sensor_read!
[ 55.247057]
[ 55.249294] [CSI_DEBUG] [GC2035]sensor_read reg 0x17
[ 55.254821]
[ 55.256686] [CSI_DEBUG] [GC2035]sensor_read reg 0x17 after cci_read_a8_d8 ret 0
[ 55.266420]
[ 55.268480]
[ 55.270121] [CSI_DEBUG] [GC2035]sensor_read reg 0x17 end ret 0
[ 55.279222]
[ 55.281147] csi->frame_info.frm_byte_size = 460800
[ 55.286636] [VFE]queue_setup, buffer count=8, size=460800
[ 55.422470] CPU3: shutdown
[ 55.425825] psci: CPU3 killed.
[ 55.618538] CPU2: shutdown
[ 55.623478] psci: CPU2 killed.
[ 55.815160] CPU1: shutdown
[ 55.818160] psci: CPU1 killed.
[ 56.605177] CPU1: Booted secondary processor
[ 56.609895] CPU1: update cpu_power 1968128
[ 57.279180] [VFE]cs/isp reset after csi/isp interrupt timeout!
这说明开机后,可能还是做过power off,看代码在vfe_suspend_helper
还是执行了vfe_disable_regulator_all,问题清楚了。 a33所谓的suspend并没有给摄像头断电,应该不需要sensor_init操作i2c了;
但是a64每次都是整个电源关了,所以每次必须通过sensor_init的i2c协议重新设置模式,比如video模式等等。
但是还是不行, 看来目前每次都得sensor_init。
综上所述, 还是照vfe.c之前默认实现,每次都power on,off,然后power on的时候就老老实实在sensor_init里面把i2c走一遍好了。
十五) 【没解决】开关屏,遥控器开机关机,rtc,定时开机
1. 最新的配置进了standby 无法唤醒,发现power短按也无法
2. 把uboot用最新的,kernel用原始的,发现power短按可以了,但是PL7虽然打印但是无法wakeup
echo 5000 > /sys/module/pm_tmp/parameters/time_to_wakeup
这个是个调试方法,单位ms, 进了standby后5s自动会wakeup
3. 把kernel中的dtsi,pwm相关的.c文件都更新, 发现standby进入不了了,提示bt,active wakeup source: NETLINK。
4. 把kernel中的gmac相关的.c文件都更新, 发现standby进入不了了,提示bt,active wakeup source: NETLINK。
5. 把sys_config中的wlan_hostwake注释掉了,发现standby能进去了
;20161114 byh wlan_hostwake = port:PL03<6><default><default><0>
十六) eth0的dns为什么设置不好使
android5.1需要这样设置了
ndc resolver setnetdns eth0 “” 202.106.0.20 8.8.8.8
类似的文档提到如下:
The syntax for the DNS related stuff is this:
# ndc resolver flushif <iface>
# ndc resolver flushdefaultif
# ndc resolver setifdns <iface> <domains> <dns1> <dns2>
# ndc resolver setdefaultif <iface>
十七) 耳机,speaker,mic, 键盘,tf卡
这些默认就支持了,可以用。
十八)听筒
1. 耳机插入后的日志
shell@tulip-p1:/ # [ 1734.788665] SUNXI_HMIC_STS:8,225
[ 1734.802609] SUNXI_HMIC_STS:10,225
[ 1734.821339] SUNXI_HMIC_STS:8,225
[ 1734.841041] SUNXI_HMIC_STS:8,225
[ 1735.089920] SUNXI_HMIC_STS:10,225
[ 1735.099519] SUNXI_HMIC_STS:8,225
[ 1735.103360] SUNXI_HMIC_STS:8,225
[ 1735.107686] SUNXI_HMIC_STS:8,225
[ 1735.118746] SUNXI_HMIC_STS:10,225
[ 1735.124775] SUNXI_HMIC_STS:8,225
[ 1735.298614] tempdata:0,ctx->HEADSET_DATA:10,reg_val:0
[ 1735.308239] sunxi_check_jack_type,l:111, ctx->HEADSET_DATA:16
[ 1735.380756] CPU1: Booted secondary processor
[ 1735.385475] CPU1: update cpu_power 1968128
[ 1735.987358] tempdata:1f,ctx->HEADSET_DATA:10,reg_val:1f00
[ 1735.996829] sunxi_check_jack_type,l:101, ctx->HEADSET_DATA:16
[ 1736.007131] codec_aif_mute mute = 1 spkenable = 0
[ 1736.036729] codec_aif_mute mute = 0 spkenable = 0
2.耳机拔出后的日志,这个有的时候不好使有的时候好使,有bug
127|shell@tulip-p1:/ # [ 2767.803472] SUNXI_HMIC_STS:1f10,225
[ 2767.807423] plugout_end:switch:0
[ 2767.821256] SUNXI_HMIC_STS:10,225
[ 2767.827013] SUNXI_HMIC_STS:8,225
[ 2767.833741] SUNXI_HMIC_STS:10,225
[ 2767.837498] plugout_end:switch:0
[ 2767.841029] SUNXI_HMIC_STS:8,225
[ 2767.844785] SUNXI_HMIC_STS:10,225
[ 2767.856542] plugout_end:switch:0
[ 2767.861367] CPU1: Booted secondary processor
[ 2767.866070] CPU1: update cpu_power 1968128
[ 2769.402554] CPU1: shutdown
[ 2769.405524] psci: CPU1 killed.
[ 2769.480501] codec_aif_mute mute = 1 spkenable = 1
127|shell@tulip-p1:/ # [ 2769.913220] codec_aif_mute mute = 0 spkenable = 1
3. 如何设置hp,speaker,earout 各自的开关,并且互不影响,用tinymix
110 BOOL 1 External Speaker Switch On
111 BOOL 1 Headphone Switch Off
112 BOOL 1 Earpiece Switch Off
比如 tinymix 112 1 就是开听筒, tinymix 112 0 就是关听筒。
4. 插入耳机后,发现mic就没有声音了
拔出耳机日志
hell@tulip-p1:/ # [ 1091.391098] SUNXI_HMIC_STS:1f10,225
[ 1091.401699] plugout_end:switch:0
[ 1091.405234] SUNXI_HMIC_STS:8,225
[ 1091.421139] SUNXI_HMIC_STS:10,225
[ 1091.429060] SUNXI_HMIC_STS:10,225
[ 1091.451164] SUNXI_HMIC_STS:10,225
[ 1091.912319] tempdata:1f,ctx->HEADSET_DATA:10,reg_val:1f00
[ 1091.918265] sunxi_check_jack_type,l:101, ctx->HEADSET_DATA:16
[ 1091.948705] plugout_end:switch:0
[ 1094.435993] CPU1: Booted secondary processor
[ 1094.440721] CPU1: update cpu_power 1968128
[ 1096.006820] CPU1: shutdown
[ 1096.009970] psci: CPU1 killed.
对应的mix的status
31 ENUM 1 MIC2 SRC MIC2
32 BOOL 1 RADC input Mixer MIC1 boost Switch On
33 BOOL 1 RADC input Mixer MIC2 boost Switch Off
34 BOOL 1 RADC input Mixer LINEINR Switch Off
35 BOOL 1 RADC input Mixer r_output mixer Switch Off
36 BOOL 1 RADC input Mixer l_output mixer Switch Off
37 BOOL 1 RADC input Mixer PHONINN Switch Off
38 BOOL 1 RADC input Mixer PHONINN-PHONINP Switch Off
39 BOOL 1 LADC input Mixer MIC1 boost Switch On
40 BOOL 1 LADC input Mixer MIC2 boost Switch Off
插入耳机日志
# [ 99.632384] SUNXI_HMIC_STS:8,225
[ 99.686198] SUNXI_HMIC_STS:8,225
[ 99.737616] SUNXI_HMIC_STS:10,225
[ 99.747700] SUNXI_HMIC_STS:8,225
[ 100.137405] tempdata:1f,ctx->HEADSET_DATA:10,reg_val:1f00
[ 100.149829] sunxi_check_jack_type,l:101, ctx->HEADSET_DATA:16
[ 100.205084] SUNXI_HMIC_STS:1f10,225
[ 100.437153] SUNXI_HMIC_STS:10,225
[ 100.531324] SUNXI_HMIC_STS:8,225
[ 100.688378] tempdata:0,ctx->HEADSET_DATA:10,reg_val:0
[ 100.695172] sunxi_check_jack_type,l:111, ctx->HEADSET_DATA:16
[ 100.918267] CPU1: Booted secondary processor
[ 100.922968] CPU1: update cpu_power 1968128
[ 101.229872] tempdata:1f,ctx->HEADSET_DATA:10,reg_val:1f00
[ 101.235997] sunxi_check_jack_type,l:101, ctx->HEADSET_DATA:16
对应的mix的status
32 BOOL 1 RADC input Mixer MIC1 boost Switch Off
33 BOOL 1 RADC input Mixer MIC2 boost Switch On
34 BOOL 1 RADC input Mixer LINEINR Switch Off
35 BOOL 1 RADC input Mixer r_output mixer Switch Off
36 BOOL 1 RADC input Mixer l_output mixer Switch Off
37 BOOL 1 RADC input Mixer PHONINN Switch Off
38 BOOL 1 RADC input Mixer PHONINN-PHONINP Switch Off
39 BOOL 1 LADC input Mixer MIC1 boost Switch Off
40 BOOL 1 LADC input Mixer MIC2 boost Switch On
所以如果想在插入耳机后,依然能使用mic1,那么调用如下
/data/tinymix 32 1;/data/tinymix 39 1
5. 后续bug: 耳机能插入检查, 但是拔出一半概率不知道。喇叭开机响过,再就没了。
十九)uboot下的usb otg
这个和供应商沟通过, uboot下都没有加载这个驱动,OTG无法使用
二十二) 剩余: i2c触摸屏
已经解决
二十三)屏上电顺序
mipi初始化-》172上电,reset -》 172寄存器 -》 开屏压(200ms?) -》背光
【a64】【调试计划-第二轮】
================
1) 耳机: 耳机拔出的检测没有探测到。(本来电平值, 后来冀老师给改成高低电压了)
2) hdmi: 插入有问题, 体现到双屏异显必须重新插入hdmi。
3) 开机logo: 显示的开机logo太慢,大概30秒。
uboot下 MIPI的电源是dldo1, ep172是dc1sw 需要打开
C73 dldo1
C48 dc1sw
发现uboot下, dc1sw 对应vcc-lcd没有enable, 而 dldo1 对应vcc-mipi是enable的
发现uboot下,i2c是可以用的。
4) 声音受控: hdmi的声音是否需要受控? 喇叭的声音是否需要受控?
5) 红外: 从待机到开机。 rtc,从待机到开机。
6) 网口: 吞吐量,网速测试。 目标80M/s;dns
7) ldvs: 确定ep172是否达标,可以量产。
8) 背光: 背光开关是否好用。 开屏关屏的顺序。如果是7寸屏需要摘电容测试pwm效果。
9) i2c触摸: 找老韩,挂一个10寸触摸屏测试。
喇叭: 目前是单声道(+-),需要软件设置成左右声道。
a64 专门有pin是LINEOUTP/LINEOUTN, 好像就是差分的; 这个软件上如何设置为双声道的LINEOUTL和LINEOUTR? 这块软件如何设置?
在android/device/softwinner/[case name]/[case name].mk中加上下面这个属性即可:
ro.spk_dul.used=true //是否使用双喇叭:
11) rtc: 2个rtc使用, 看看是否保留原来系统,需要使用我们硬件时钟的时候,硬件时钟起作用。
12) usbotg: 冀老师提供一个otg插口,有tf卡,可以在uboot测试 一下
13) 内存: 是否能大到2G
14)
【a64】【调试计划-第三轮】
================
1. 经常开机在log节目闪屏
2. 偶尔开机进主界面闪屏和花屏
3. 经常卡log—第一个log
4. 经常开机更新导致时间很长
5. 开机有几秒白屏,需去掉
6. 经常检测磁盘,需更改
7. 网络偶尔不通
8. 硬件时钟设置后,开机还原默认
9. 红外不好使
10. 遥控器开关机功能
11. 定时开关机功能
1. 发现用hall例子,能在kernel下面有中断,可是在standby下面就是没有反应。而且短按power键或者定时wakeup也没有
分析1.1) 后来发现menuconfig把EHCI1,OHCI1给去掉,虽然usb鼠标不能用,但是短按power或者定时wakeup就好了。
分析1.2) 然后发现设置中断时候一个关键选项 IRQF_NO_SUSPEND一定要有。然后PL7接地就好使了。
ret = devm_request_irq(&(input_dev->dev), irq_number, switch_handle,
IRQF_TRIGGER_RISING|IRQF_TRIGGER_FALLING | IRQF_NO_SUSPEND, “HAL_EINT”, NULL);
因为解释是 IRQF_NO_SUSPEND - Do not disable this IRQ during suspend。
参照bluetooth/rtl_btlpm.c的写法。之前没有写就死活唤不醒。
2.写个例子设置定时开机
./RtcAlamWakeup 3 里面实际是ioctl, 3分钟后起来了,证明好使。
12. u盘升级屛参
13. u盘升级内核
14. web页面对终端进行配置
15. 开机时长优化
16. 随着画面不同,背光亮度跟着变,亮度应该一直
看“音乐”app的日志,应该是上层调用了 DISP_LCD_SET_BRIGHTNESS。