333开发记录
1、查看sensor 输入状态
# cat sys/class/mstar/vif0/vif_info
2、查看开机信息
# dmesg
3、配置系统功能
# make config
4、sdk -> main
..\sdk\verify\Cardvimpl\cardv\src
5、sdk -> cgi
..\sdk\verify\Cardvimpl\net\cgi_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...等变量找不到。
在kernel\arch\arm\boot\dts 下的对应设备树节点添加
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 模块开机自动安装运行
在文件 \project\image\configs\i6b0\rootfs_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调试配置;
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
(去掉 #)
21、监控内核打印
#cat /proc/kmsg &
#dmesg 只打印一次,而上面命令只需打开一次,后面只要有操作都会打印出来。
22、修生成 8M FLASH 升级档重点
根据 image\output\images\partition_layout.txt 最终的 FLASH 空间划分去调整
image\configs\i6b0\nor.squashfs.partition.cardv.config 的FLASH 空间分配;
注意:FLASH 空间划分的 customer 大小要空出 100K左右用于交换存储新配置,否则会导致配置丢失;
查看 customer 剩余空间大小,在机器运行状态下使用命令
#df -h
23、使用红色闪迪 32G TF卡,高温开机不录像,拔插TF卡又可正常录像;铠侠TF卡出现该问题概率极底;
解决方法1:在内核驱动 sd.c 下增加当检测到sd 卡时,复位sd 卡再检测一遍;
解决方法2:在内核驱动 Hal_CARD_InitPADPin(eIP, ePAD); 后面增加延时100ms Hal_Timer_mSleep(100);
24、查看gpio占用状态:
#cat /sys/kernel/debug/gpio
25、查看串口ttyS* 与设备树注册状态:
#ls -l /sys/class/tty/
26、查看设置串口:
----查看串口波特率等信息
#stty -F /dev/ttyS3 -a
----设置串口ttySTM6 波特率为9600,8位数据位,1位停止位,无校验位
#stty -F /dev/ttyS3 speed 9600 cs8 -cstopb -parenb
遇到问题并解决问题是最有效的学习方式,当然过程也是最痛苦的。不要问我明天去哪里,去干嘛,我只想说:我现在在解问题!