运行环境配置
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配置,如果需要使用多buffer,buffer贴到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仅支持2(ARGB4444)、6(ARGB1555)这两种格式 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代表VPE,1代表DIVP 26. FB_MOD = 1 27. ; 配置叠加通道的channel id,port 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等信息,详见系统分区。