1、查看sensor 输入状态
# cat sys/class/mstar/vif0/vif_info
2、查看开机信息
# dmesg
3、配置系统功能
# make config
4、sdk -> main
..sdkverifyCardvimplcardvsrc
5、sdk -> cgi
..sdkverifyCardvimpl etcgi_1.0.0
6、boot,kernel,project 配置
# make menuconfig
7、执行程序 # ./xxconf 提示 “./xxconf: Permission denied” 或 “./xxconf: ./xxconf: cannot execute binary file” 可能是权限问题
修改执行程序权限 #sudo chmod 777 xxconf
8、project 配置sensor 导致编译出错无法找到原因,重新解压project 后不修改编译无法通过,提示
... libprotobuf-lite.so': No such file
... libcrypto.so': No such file
... libssl.so': No such file
解决方法:在project 目录下 find -name "libprotobuf-lite.so" 找到 No such file 的三个文件并删除,再次编译通过。
9、Kernal menuconfig 里打开 GSensor sc7a20,以模块方式编译,报错。提示input_set_abs_params, input_event, input_register_device...等函数找不到,而linux/input.h 已添加。
原因:没有把input 子系统加入kernel。
解决方法:添加input 子系统
可以不用模块方式添加,嵌入方式也可以,省去添加模块步骤;
10、Kernal menuconfig 里打开 GSensor sc7a20,以模块方式编译通过,将sc7a20.ko 开机运行,提示找不到设备树节点poll_interval,min_interval,g_range...等变量找不到。
在kernelarcharmootdts 下的对应设备树节点添加
sc7a20@19 {
compatible = "silan,sc7a20_acc";
reg = <0x19>;
poll_interval = <1000>;
min_interval = <500>;
g_range = <0>;
axis_map_x = <0>;
axis_map_y = <1>;
axis_map_z = <2>;
negate_x = <1>;
negate_y = <1>;
negate_z = <1>;
};
11、新SDK 编译通过,升级成功,再上电开机提示 Verifying Checksum ... Bad Data CRC ERROR: can't get kernel image! 然后卡死。
分析是准备加载内核时校验出错。1、可能是存储有坏块(升回旧软件正常,排除);2、编译合成问题,不大可能,就剩下是配置问题(因为拿到新SDK编译有问题,原厂另外再提供过配置文件),对比新旧SDK配置文件发现新SDK FLASH SIZE = 8M,
而实际使用16M,也与旧SDK相同,改为16M 后升级再开机正常;
12、查找目录下所有文件包涵的字符串
# grep -rn "需要查找的字符串"
13、调试GSensor 流程
1、驱动问题:修改驱动(kernel) -> 编译kernel -> 返回到project 目录拷贝gsensro.ko 到交叉目标系统目录 #cp -f ./kbuild/4.9.84/modules/gsensor.ko ./release/cardv/i6b0/common/uclibc/4.9.4/modules/4.9.84/ -> 编译交叉目标系统并生成 image -> 升级更新;
2、应用问题:修改应用(sdk) -> 编译sdk (目录 ./sdk/verify/Cardvimpl/cardv) -> 将新就用更新到 project #make install -> 编译交叉目标系统并生成 image -> 升级更新;
14、使GSensor 模块开机自动安装运行
在文件 projectimageconfigsi6b0 ootfs_cardv.mk 添加
cp -rf $(LIB_DIR_PATH)/modules/$(KERNEL_VERSION)/$(GSENSOR_MODULE) $(BOOT_CONFIG)/modules/$(KERNEL_VERSION);
echo insmod /bootconfig/modules/$(KERNEL_VERSION)/$(GSENSOR_MODULE) >> $(BOOT_CONFIG)/demo.sh;
注意添加位置,否则会导致GSensor 无法正常工作。
15、换新电脑重新搭建开发环境,同样的SDK 执行 # ./setup_config 报错 sh: Bad substitution
原因:两种shell语言解释器 bash和dash
查看当前/bin/sh 指向哪种解释器:
# ls /bin/sh -al
lrwxrwxrwx 1 root root 4 Mar 26 2018 /bin/sh -> dash
修改bin/sh指向为bash:
# sudo ln -fs /bin/bash /bin/sh
或者运行 # sudo dpkg-reconfigure dash 后选择NO
参考:shell字符串截取报错:Bad substitution的解决
16、新SDK0308 编译通过后,升级开机 wifi 无法生成SSID,log提示“Read-only file system”
修改 ./project/image/configs/i6b0 -> nor.squashfs.partition.cardv.config
FLASH_SIZE==16M
FLASH_SIZE==8M
猜测可能是存储空间不够导致。
17、参考开发文档在uboot 控制gpio,实测开发文档提供api 无法控制gpio,但可以终端命令控制GPIO。
找到命令控制GPIO ,查看最终使用api,使用该api 控制GPIO
/* Power Enable */
MDrv_GPIO_Pad_Set(PAD_POWER_EN);
mdrv_gpio_set_high(PAD_POWER_EN);
放在 void main_loop(void) 前无效,所以相关GPIO 初始化放在 void main_loop(void) 里;
18、更新IQ
更新IQ文件,只需修改CONFIG_IQ_API="gc2053/gc2053_day_api.bin"部分。
CONFIG_IQ0 到CONFIG_IQ3 默认使用"imx307/imx307_iqfile.bin"。
平常录像要关掉 IQ_Adjust,IQ_Adjust只会调试IQ时用到。
19、调试IQ: https://files.cnblogs.com/files/LittleTiger/IQ%E8%B0%83%E8%AF%95%E9%85%8D%E7%BD%AE.zip
20、uboot 烧录固件后不重启,直接从内核启动。这样处理是为了解决打开自动升级功能 uboot 烧录固件后重启,重启烧录。
修改 ./project/board/usb_upgrade_scripts/nor_script 目录下的 set_config 文档,
将命令
# reset
改为
# sf probe 0
# sf read 0x22000000 ${sf_kernel_start} ${sf_kernel_size}
# bootm 0x22000000
(去掉 #)
遇到问题并解决问题是最有效的学习方式,当然过程也是最痛苦的。不要问我明天去哪里,去干嘛,我只想说:我现在在解问题!