运行环境配置

Version 1.0


1. 简介

根据环境搭建的编译章节已经能编译构建出一个默认配置的的image包,本文主要介绍如何根据实际硬件选型及业务需求客制化image。

下面以spi nand版本为例,emmc版本请根据配置表格选择正确的配置文件进行修改,如SSA330Q SPI nand版本应编辑spinand.glibc-9.1.0-squashfs.012b.256.qfn128文件。


2. Sensor配置

SSA330Q/D支持两路摄像头,用户可以自由搭配不同的摄像头型号,因此用户需指定每个摄像头的“型号+连接位置”。“型号”决定了驱动,“连接位置”则是通过chmap参数传给sensor驱动。以“imx307+gc2053”组合为例,加载sensor驱动的方式如下:

1.  # Sensor pad0,对应chmap=1  
2.  insmod /config/modules/4.9.84/imx307_MIPI.ko chmap=1  
3.  # Sensor pad2,对应chmap=4  
4.  insmod /config/modules/4.9.84/gc2053_MIPI.ko chmap=4

目前常用的组合如下。

Pad 0(RGB) Pad 2(IR)
Imx307 Gc2053
Imx307 Gc1054
Gc1054 Gc1054

Sensor pad0及pad2由SSA330硬件决定,对应的chmap值为pad指定二进制位对应的十进制值,即chmap = 0x1 << pad。在打包前根据实际的sensor搭配,修改project/configs/ipc/i6e/spinand.glibc-9.1.0-squashfs.012b.256.qfn128文件的以下参数后重新setup_config.sh再编译image,烧写到板子上后可以在/customer/demo.sh启动脚本中看到有两条insmod加载驱动的命令。

1.  # 打包到image中的sensor驱动列表,可以在project/release/ipc/i6e/common/glibc/9.1.0/modules/4.9.84目录看到所有的驱动  
2.  SENSOR_LIST = gc1054_dual_MIPI.ko gc1054_MIPI.ko imx307_MIPI.ko gc2053_MIPI.ko  
3.  # sensor 0型号,选择sensor list中的一个  
4.  SENSOR0 = imx307_MIPI.ko  
5.  # sensor 0 option  
6.  SENSOR0_OPT = chmap=1  
7.  # sensor 1型号,选择sensor list中的一个  
8.  SENSOR1 = gc2053_MIPI.ko  
9.  # sensor 1 option  
10. SENSOR1_OPT = chmap=4

只接一路sensor的情况下可以根据实际情况省略上面的SENSOR0或SENSOR1。

注意,如果连接的是两路gc1054的话,那么app中先必须初始化gc1054_dual_MIPI.ko驱动指定chmap对应的那个sensor pad。


3. Panel配置

SSA330只能接ttl接口的lcd屏,这里只介绍ttl时序配置部分;部分屏还需要通过spi总线配置参数,这部分将在app中完成。要能正常点亮lcd屏需要板子上存在/config/config.ini这个屏参文件,且指定的屏及时序参数正确。

修改project/board/ini/misc/config.ini文件,在最开头的m_pnlList中指定当前使用的屏,如demo板使用的5寸屏:

1.  m_pnlList = {\  
2.      LX50FWB4001_RM68172,\  
3.  }

根据屏的datasheet在适当的位置增加一套屏参,可以复制demo板使用的5寸屏的参数进行修改,如下:

1.  [LX50FWB4001_RM68172]  
2.  m_pPanelName = "LX50FWB4001_RM68172";  
3.  m_bPanelDither = 0;  
4.  m_ePanelIntfType = 0; #0:ttl 1:lvds 11:mipi 12:bt656  
5.    
6.  m_bPanelInvDCLK = 1;  
7.  m_bPanelInvDE = 0;  
8.  m_bPanelInvHSync = 1;  
9.  m_bPanelInvVSync = 1;  
10.   
11. m_wPanelHSyncWidth = 2;  
12. m_wPanelHSyncBackPorch = 0;  
13. m_wPanelVSyncWidth = 3;  
14. m_wPanelVBackPorch = 16;  
15. m_wPanelHStart = 0;  
16. m_wPanelVStart = 22;  
17. m_wPanelWidth = 480;  
18. m_wPanelHeight = 854;  
19.   
20. m_wPanelHTotal = 484;  
21. m_wPanelVTotal = 950;  
22. m_wPanelDCLK = 32000000;  
23.   
24. m_wSpreadSpectrumFreq = 0;  
25. m_wSpreadSpectrumRatio = 0;  
26.   
27. m_eOutputFormatBitMode = 3; #0:10bit 1:6bit 2:8bit 3:565bit  
28.   
29. m_wPadmux = 4;  
30. ;m_wPanelFixedDCLK = 43200000;  
31.   
32. m_ucPanelSwapChnR = 0;  
33. m_ucPanelSwapChnG = 0;  
34. m_ucPanelSwapChnB = 0;  
35. m_ucPanelSwapRgbML = 0;

屏参介绍参考配置屏参

修改rootfs配置,将config.ini文件拷贝到/config/目录,请参考**第5章Rootfs配置**。


4. FB配置

使用fb之前需先配置好fb的分辨率、数据格式及绑定位置(指定vpe或divp的通道的输出口)等参数。系统将从/config/fbdev.ini文件中读取这些参数,用户可以通过编辑project\board\i6e\$BOARD_NAME\config文件来指定需要的配置,如SSA330 demo板fbdev.ini文件的存放位置为project\board\i6e\SSC012B-S01A\config

1.  [FB_DEVICE]  
2.  ; Canvas内容的ID号码每个FB_DEVICE必须指定唯一的ID号不得重复  
3.  FB_BUF_ID = 0  
4.  ; 多buffer配置如果需要使用多bufferbuffer贴到divp用2张贴到vpe用3张  
5.  FB_BUF_CNT = 2  
6.  ; GOP显示的format在同一个GOP上的gwin必须使用同一个Format数据  
7.  ; RGB565 = 1  
8.  ; ARGB4444 = 2  
9.  ; ARGB8888 = 5  
10. ; ARGB1555 = 6  
11. ; YUV422 = 9  
12. ; I8 = 4  
13. ; I4 = 13  
14. ; I2 = 14  
15. ; SSA330仅支持2ARGB4444)、6ARGB1555这两种格式  
16. FB_HWWIN_FORMAT = 6  
17. ; Canvas内容的宽度/高度  
18. FB_WIDTH = 1920  
19. FB_HEIGHT = 1080  
20. ; Canvas内容实际显示的宽度高度如果显示的宽高大于内容的宽高硬件会自动做scaling up请注意实际显示的宽高必须大于内容的宽高否则当前的硬件不支持scaling down  
21. FB_TIMMING_WIDTH = 1920  
22. FB_TIMMING_HEIGHT = 1080  
23. ; FB通道属性配置ID0代表FB_BUF_ID为0的Canvas内容叠加到该通道  
24. [FB_BUF_ID0_PATH]  
25. ; 配置要叠加到通道的模块类型0代表VPE1代表DIVP  
26. FB_MOD = 1  
27. ; 配置叠加通道的channel idport id  
28. FB_CHN = 0  
29. FB_PORT = 0  
30. ; 配置使用的GWIN ID号若与Region混合使用GWIN ID越大显示层级越低最大不得超过或等于硬件GWIN的个数  
31. FB_GWIN_ID = 7

一般情况下用户需要修改的参数是宽高FB_WIDTH、FB_HEIGHT、FB_TIMMING_WIDTH、FB_TIMMING_HEIGHT以及绑定位置FB_MOD、FB_CHN、FB_PORT。

配置完上述的文件之后需要串好从绑定位置到panel的数据通道(更多细节请参考app开发参考文档),可以直接送摄像头数据或者往该模块中填入黑色数据。


5. 默认驱动配置

用户要增删默认加载的驱动时可以编辑project/kbuild/4.9.84/i6e/configs/ipc/012B/glibc/9.1.0/spinand/modules/kernel_mod_list文件,按照一行一个的原则增删所需要的驱动,带参数的话直接写到驱动的末尾。

如:

g_webcam.ko streaming_maxpacket=3072 streaming_maxburst=13 uac_function_enable=0

6. Rootfs配置

rootfs的生成规则位于project/image/configs/i6e/rootfs.mk文件中,用户根据实际需要修改即可。

如“Panel配置”中的屏参文件,在rootfs.mk中有如下规则:

1.  if [ $(LCD) != "" ]; then \  
2.      echo "ln -s /customer/misc/config.ini /config/config.ini" >> $(OUTPUTDIR)/customer/demo.sh;\  
3.  fi;  
4.  if [ $(LCD) = CUSTOMER_PANEL_INDEX_SAT070AT50H18BH_1024x600_TTL ]; then \  
5.      sed -i "0,/LX50FWB4001_RM68172/s//SAT070AT50H18BH/" $(OUTPUTDIR)//customer/misc/config.ini;\  
6.  fi;  
7.  if [ $(LCD) = CUSTOMER_PANEL_INDEX_stGC9503v_ds_v100_800x480_TTL ]; then \  
8.      sed -i "0,/LX50FWB4001_RM68172/s//stGC9503v_ds_v100/" $(OUTPUTDIR)//customer/misc/config.ini;\  
9.  fi;  
10. if [ $(LCD) = CUSTOMER_PANEL_INDEX_ST7796U_320x480_TTL ]; then \  
11.     sed -i "0,/LX50FWB4001_RM68172/s//ST7796U_320x480/" $(OUTPUTDIR)//customer/misc/config.ini;\  
12. fi;

根据以上规则,在config.ini中添加好特定的屏之后,需要在project配置(参考编译说明相关内容)中添加一行定义LCD变量,如:

LCD=CUSTOMER_PANEL_INDEX_LX50FWB4001_RM68172_480x854_TTL

7. 分区配置

分区配置文件存放于project/image/configs/i6e文件夹下,默认使用的配置如下:

Flash Config
Spi nand spinand.squashfs.partition.config
Emmc emmc.ext4fs.partition.config

需要变更分区配置的话主要关注开头的IMAGE_LIST及后面每个分区的PATSIZE等信息,详见系统分区