333开发记录

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

 (去掉 #)

 

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

原文地址:https://www.cnblogs.com/LittleTiger/p/14479007.html