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

 

 

遇到问题并解决问题是最有效的学习方式,当然过程也是最痛苦的。不要问我明天去哪里,去干嘛,我只想说:我现在在解问题!

posted @ 2021-03-04 10:57  酒醉的Tiger  阅读(365)  评论(0编辑  收藏  举报