导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页
    1. 主页
    2. livpo
    3. 帖子
    • 资料
    • 关注 0
    • 粉丝 10
    • 我的积分 5363
    • 主题 49
    • 帖子 127
    • 最佳 32
    • 群组 0

    livpo 发布的帖子

    • 回复: axp电源芯片除了这个接口可以设置电压之外,还有什么地方可以设置电压

      uboot和spl也会设置,kernel设置前可以检查之前的设置情况或者清除设置

      发布在 其它全志芯片讨论区
      livpo
      livpo
    • 全志lichee的pack命令

      全志lichee目录打包命令流程 pack

      将打包命令传进去build.sh脚本里面。查看buildsh里面的脚本命令。

      其实里面的脚本还是较为简单地的,仅仅是作为一个过渡,然后就跑进去buildroot/scripts目录下的mkcommon.sh脚本里面。 那么需要转到这个脚本里面做了什么事情。

      一、脚本源码分析

      #!/bin/bash				
      BR_SCRIPTS_DIR=`dirname $0`			// $0就是这个文件名字
      # source shflags						
      . ${BR_SCRIPTS_DIR}/shflags/shflags		//标志
      . ${BR_SCRIPTS_DIR}/mkcmd.sh			//这个脚本有大量的命令函数
      
      [ -f .buildconfig ] && . .buildconfig   
       //以下就是对传进来的$1进行一个判断
      if [ "x$1" = "xconfig" ] ; then				/*config命令*/							
      	. ${BR_SCRIPTS_DIR}/mksetup.sh								
      	exit $?
      elif [ "x$1" = "xpack" ] ; then				 /*pack 命令*/
      	init_defconf
      	mkpack
      	exit $?
      elif [ "x$1" = "xpack_debug" ] ; then		/*pack_debuf命令*/
      	init_defconf
      	mkpack -d card0
      	exit $?
      elif [ "x$1" = "xpack_dump" ] ; then		/*pack_dump命令*/
      	init_defconf
      	mkpack -m dump
      	exit $?
      elif [ "x$1" = "xpack_prvt" ] ; then		   /*pack_prvt命令*/	
      	init_defconf
      	mkpack -f prvt
      	exit $?
      elif [ $# -eq 0 ] ; then
      	init_defconf
      	mklichee
      	exit $?
      fi
      

      在这里单独讲解pack这个参数,其他的参数可以参考我以前的博客。可以看到一旦pack这个参数成立之后就会执行一下两行脚本:

      init_defconf
      	mkpack
      	exit $?
      

      init_defconf函数命令:

      首先说明这个命令函数是在同目录下mkcmd.sh文件里面。也就是上面提及的加载这个脚本进来,就可以调用里面的脚本函数,会频繁提起这个脚本。可以观察到无论上面脚本在哪里成立都会执行这个函数命令。也就是说这个是一个通用的函数命令。里面的东西不外乎通用参数和环境参数等等通用的东西

      function init_defconf()
      {
      	local pattern
      	local defconf
      	local out_dir="common"
      
      check_env
      
      //check_env参数命令里面主要判断下面标识出来LICHEE_BOARD   =  开发板型号(   0. evb    1. maple    2. redwood   3. vstar)
      的路径是否存在
      
      /*由于获取这几个封装的变量名太绕了直接给出
      LICHEE_CHIP   =	chip
      LICHEE_PLATFORM = ${platform}    //这个平台是在编译 ./build.sh config 时候选择的平台 (linux /android/dragomnoard)
      */
      	pattern="${LICHEE_CHIP}_${LICHEE_PLATFORM}_${LICHEE_BOARD}"
      	defconf=`awk '$1=="'$pattern'" {print $2,$3}' buildroot/scripts/mkrule`
      	if [ -n "${defconf}" ] ; then
      		export LICHEE_BR_DEFCONF=`echo ${defconf} | awk '{print $1}'`   //配置环境参数
      		export LICHEE_KERN_DEFCONF=`echo ${defconf} | awk '{print $2}'`//配置环境参数
      
      		out_dir="${LICHEE_BOARD}"
      	else
      		pattern="${LICHEE_CHIP}_${LICHEE_PLATFORM}"
      		defconf=`awk '$1=="'$pattern'" {print $2,$3}' buildroot/scripts/mkrule`//配置环境参数
      
      		if [ -n "${defconf}" ] ; then
      			export LICHEE_BR_DEFCONF=`echo ${defconf} | awk '{print $1}'`
      			export LICHEE_KERN_DEFCONF=`echo ${defconf} | awk '{print $2}'`
      			out_dir="common"
      		fi
      	fi
      
          export LICHEE_PLAT_OUT="${LICHEE_OUT_DIR}/${LICHEE_CHIP}/${LICHEE_PLATFORM}/${out_dir}"
          export LICHEE_BR_OUT="${LICHEE_PLAT_OUT}/buildroot"
          mkdir -p ${LICHEE_BR_OUT}
      }
      
      环境设置到到这里就结束,回到主脚本体里面。
      
      Mkpack(重点)
      
      function mkpack()
      {
          mk_info "packing firmware ..."   // mk_info为打印函数
      
      	check_env			//判别函数,判断对应的文件路径是否存在的一个函数
      
          (cd ${LICHEE_TOOLS_DIR}/pack && \
          	./pack -c ${LICHEE_CHIP} -p ${LICHEE_PLATFORM} -b ${LICHEE_BOARD} $@)
      }
      

      一下才是pack命令里面的重点。:

      (cd ${LICHEE_TOOLS_DIR}/pack && \
        ./pack -c ${LICHEE_CHIP} -p ${LICHEE_PLATFORM} -b ${LICHEE_BOARD} $@)
      

      首先以下这句话就是在重点cd /tools/pack 目录下。

      cd ${LICHEE_TOOLS_DIR}/pack       (有关pack目录下的内容)
      

      然后下半段命令:

      ./pack   -c  ${LICHEE_CHIP}   -p  ${LICHEE_PLATFORM}    -b  ${LICHEE_BOARD} $@)
      LICHEE_CHIP       =  (全志版本)
      LICHEE_PLATFORM  =  (这个是编译的平台)
      LICHEE_BOARD     =   (厂家配置)
      

      以上三个配置就是在在执行 /build.sh config 选择全志版本,平台,具体产家配置。

      那么置换回来就可以得到以下命令:
      这个命令就是说判断

      /*
      sun8iw5p1是否存在并且是字特殊文件则为真
      linux是否存在并且是一个名字管道
      vstar是否存在并且是一个块特殊文件则为真 */
      
      ./pack   -c   sun8iw5p1    -p  linxu     -b  vstar  $@
      

      转而分析到这个pack脚本,这个脚本在(tools/pack)

      ①执行:. …/…/buildroot/scripts/shflags/shflags
      (执行这个脚本里面内容做了以下的处理,拿到对应的版本号等操作,定义一些大 判断或者识别的函数)
      主线程里面到LICHEE_OUT(lichee/out/sun8iw5p1/dragonboard/common
      )目录下

      配置对应的环境:

      export PATH=${TOOLS_DIR}/mod_update:${TOOLS_DIR}/eDragonEx:${TOOLS_DIR}/fsbuild200:${TOOLS_DIR}/android:$PATH
      

      最后查看PACK脚本保存大量的函数命令,直接可以执行到以下脚本的操作

      D9B68BC3-FE52-43fa-87DB-99E4735CBBB9.png

      然后执行这个函数:

      do_prepare  
      {
      	#判断这个是三个参数要是任意一个为空,即为真。进入 
      	#其中的(-o) 是或运算
      
      if [ -z "${PACK_CHIP}" -o -z "${PACK_PLATFORM}" -o -z "${PACK_BOARD}" ] ; then
      	pack_error "invalid chip, platform or board."    #打印错误信息 
      	show_boards
      	exit 1
      fi
      
      if [ ! -d chips/${PACK_CHIP}/configs/${PACK_BOARD} ] ; then
      	pack_error "board dir or path do not exist."
      	show_boards
      	exit 1
      fi
      
      # cleanup
      rm -rf out/       #删除清空out目录,
      mkdir -p out/	  #重新创建out目录
      
      printf "copying tools file\n"   			#
      for file in ${tools_file_list[@]} ; do #拷贝对应的
      	cp -f $file out/ 2> /dev/null
      done
      
      if [ "x${PACK_MODE}" = "xdump" ] ; then
          cp -rf common/tools/usbtool_test.fex out/usbtool.fex  #拷贝USB工具文件
      fi
      
      printf "copying configs file\n"
      for file in ${configs_file_list[@]} ; do
      	cp -f $file out/ 2> /dev/null		#拷贝file到输出目录,然后将错误输出从定向到/dev/null空设备文件里面
      done
      
      printf "copying boot resource\n"		#复制启动资源
      for file in ${boot_resource_list[@]} ; do		
      	cp -rf `echo $file | awk -F: '{print $1}'` `echo $file | awk -F: '{print $2}'` 	#拷贝对应里面的首段信息
      done
      
      printf "copying boot file\n"		#复制启动文件
      for file in ${boot_file_list[@]} ; do
      	cp -f `echo $file | awk -F: '{print $1}'` `echo $file | awk -F: '{print $2}'`
      done
      
      
      #	判断平台是否为linux平台
      if [ "x${PACK_PLATFORM}" = "xlinux" -a -f out/sys_partition_linux.fex \
      	-a "x${PACK_FUNC}" != "xprvt" -a "x${PACK_MODE}" != "xdump" ] ; then
      	mv out/image_linux.cfg out/image.cfg
      	mv out/sys_partition_linux.fex out/sys_partition.fex
      elif [ "x${PACK_PLATFORM}" = "xdragonboard" -a -f out/sys_partition_dragonboard.fex ] ; then
      	mv out/sys_partition_dragonboard.fex out/sys_partition.fex
      fi
      
      #判断开发板是什么
      if [ "x${PACK_DEBUG}" = "xcard0" -a "x${PACK_MODE}" != "xdump" \
      	-a "x${PACK_FUNC}" != "xprvt" ] ; then
      	cp $TOOLS_DIR/awk_debug_card0 out/awk_debug_card0
      	TX=`awk  '$0~"'$PACK_CHIP'"{print $2}' pctools/linux/card_debug_pin`
      	RX=`awk  '$0~"'$PACK_CHIP'"{print $3}' pctools/linux/card_debug_pin`
      	MS=`awk  '$0~"'$PACK_CHIP'"{print $4}' pctools/linux/card_debug_pin`
      	CK=`awk  '$0~"'$PACK_CHIP'"{print $5}' pctools/linux/card_debug_pin`
      	DO=`awk  '$0~"'$PACK_CHIP'"{print $6}' pctools/linux/card_debug_pin`
      	DI=`awk  '$0~"'$PACK_CHIP'"{print $7}' pctools/linux/card_debug_pin`
      
      	sed -i s'/jtag_ms = /jtag_ms = '$MS'/g' out/awk_debug_card0
      	sed -i s'/jtag_ck = /jtag_ck = '$CK'/g' out/awk_debug_card0
      	sed -i s'/jtag_do = /jtag_do = '$DO'/g' out/awk_debug_card0
      	sed -i s'/jtag_di = /jtag_di = '$DI'/g' out/awk_debug_card0
      	sed -i s'/uart_debug_tx =/uart_debug_tx = '$TX'/g' out/awk_debug_card0
      	sed -i s'/uart_debug_rx =/uart_debug_rx = '$RX'/g' out/awk_debug_card0
      	sed -i s'/uart_tx =/uart_tx = '$TX'/g' out/awk_debug_card0
      	sed -i s'/uart_rx =/uart_rx = '$RX'/g' out/awk_debug_card0
      	awk -f out/awk_debug_card0 out/sys_config.fex > out/a.fex
      	rm out/sys_config.fex
      	mv out/a.fex out/sys_config.fex
      	echo "uart -> card0"
      fi
      
      #判断平台是不是dragonboard
      #support dragonboard test emmc when boot from card0, add by liujianqiang 20140704
      if [ "x${PACK_PLATFORM}" = "xdragonboard" ] ; then
          cp $TOOLS_DIR/awk_db_emmc out/awk_db_emmc		#拷贝
          awk -f out/awk_db_emmc out/sys_config.fex > out/a.fex	 #awk调用脚本, 然后将sys_config.fex 文件重定向到a.fex文件
          rm out/sys_config.fex									
          mv out/a.fex out/sys_config.fex  #
          echo "support dragonboard test emmc when boot from card0"
          echo "[mmc2_para]-sdc_used: 0 -> 1"
      fi
      
      #将\\boot-resource 替换成 (\反义符)boot-resource
      sed -i 's/\\boot-resource/\/boot-resource/g' out/boot-resource.ini
      sed -i 's/\\\\/\//g' out/image.cfg
      sed -i 's/imagename/;imagename/g' out/image.cfg
      
      #PACK_DEBUG = USRT0 
      if [ "x${PACK_DEBUG}" = "xcard0" ] ; then
      	if [ "x${PACK_SIG}" = "xsig" ] ; then
      		IMG_NAME="${PACK_CHIP}_${PACK_PLATFORM}_${PACK_BOARD}_${PACK_DEBUG}_${PACK_SIG}.img"
      	else
      		IMG_NAME="${PACK_CHIP}_${PACK_PLATFORM}_${PACK_BOARD}_${PACK_DEBUG}.img"
      	fi
      else
      	if [ "x${PACK_SIG}" = "xsig" ] ; then
      		IMG_NAME="${PACK_CHIP}_${PACK_PLATFORM}_${PACK_BOARD}_${PACK_SIG}.img"
      	else
      		IMG_NAME="${PACK_CHIP}_${PACK_PLATFORM}_${PACK_BOARD}.img"
      	fi
      fi
      
      if [ "x${PACK_MODE}" = "xdump" ] ; then
      	IMG_NAME="${PACK_CHIP}_${PACK_PLATFORM}_${PACK_BOARD}_${PACK_MODE}.img"
      fi
      if [ "x${PACK_FUNC}" = "xprvt" ] ; then
      	IMG_NAME="${PACK_CHIP}_${PACK_FUNC}.img"
      fi
      
      echo "imagename = $IMG_NAME" >> out/image.cfg
      echo "" >> out/image.cfg
      

      当执行do_prepare函数执行完,执行到以下这个do_common。

      function do_common()
      {
      	cd out/			
      	busybox unix2dos sys_config.fex     	#busybox unix2dos 两个是全志闭源二进制脚本文件 处理sys_config.fex	busybox unix2dos 	
      	sys_partition.fex	#busybox unix2dos 两个是全志闭源二进制脚本文件 处理 sys_partition.fex
      
      	script sys_config.fex > /dev/null	#批量处理脚本命令
      	script sys_partition.fex > /dev/null	#批量处理脚本命令
      	cp sys_config.bin config.fex     
      
      if [ "x${PACK_PLATFORM}" = "xdragonboard" ] ; then  #判断平台是否dragonboard
      	busybox dos2unix test_config.fex 	
      	cp test_config.fex boot-resource/
      	busybox unix2dos test_config.fex
      	script test_config.fex > /dev/null
      	cp test_config.bin boot-resource/
      fi
      
      #update_boot0  也是全志闭源命令
      	update_boot0 boot0_nand.fex		sys_config.bin NAND > /dev/null  
      	update_boot0 boot0_sdcard.fex	sys_config.bin SDMMC_CARD > /dev/null
      
      #update_boot0  也是全志闭源命令
      	update_uboot u-boot.fex  		sys_config.bin > /dev/null
      	update_fes1  fes1.fex			sys_config.bin > /dev/null
      	update_mbr sys_partition.bin 4 > /dev/null
      
      #fsbuild   也是全志闭源命令
      		fsbuild boot-resource.ini split_xxxx.fex > /dev/null
      
      	if [ "x${PACK_FUNC}" = "xprvt" ] ; then
      		u_boot_env_gen env_burn.cfg env.fex > /dev/null
      	else
      		u_boot_env_gen env.cfg env.fex > /dev/null
      	fi
      
      	ln -s $LICHEE_OUT/arisc arisc.fex
      

      #判断实现的那个版本的系统

      if [ "x${PACK_MODE}" = "xdump" ] ; then
      	do_pack_dump
      elif [ "x${PACK_FUNC}" = "xprvt" ] ; then
      	do_pack_prvt
      else   							
      	do_pack_${PACK_PLATFORM}
      Fi
      

      这里选择的是dragonboard。

      function do_pack_dragonboard()
      {
      	printf "packing for dragonboard\n"  #打印信息
      
      #建立软连接
      ln -s ${LICHEE_OUT}/boot.img boot.fex
      ln -s ${LICHEE_OUT}/rootfs.ext4 rootfs.fex
      
      dragon image.cfg sys_partition.fex  #内存分区  
      #dragon  这个也是全志闭源的脚本,没办法查看里面的操作
      

      最后一个函数就是打印一下和修改一下IMG包
      函数到现在的时候已经将 sun8iw5p1_dragonboard_vstar.img生成成功.上面的函数没有什么提示生成IMG文件
      因为都是闭源脚本,没有办法探讨更加深刻一步。

      function do_finish()
      	{	
      		sun8iw5p1_dragonboard_vstar.img
      	if [ -e ${IMG_NAME} ]; then
              mv ${IMG_NAME} ../${IMG_NAME}
              echo '----------image is at----------'
              echo -e '\033[0;31;1m'
              echo ${ROOT_DIR}/${IMG_NAME}
              echo -e '\033[0m'
          fi
      
      	cd ..
      	printf "pack finish\n"
      }
      

      最后也就分析到这个镜像固件生成了,里面的一些听说是闭源的脚本命令都存在这个目录下。(/lichee/tools/pack/pctools/linux)。这里只能期望大神帮忙分析了

      发布在 编译和烧写问题专区
      livpo
      livpo
    • 回复: V853那个NPU的demo测试例子中量化图片能量化多张?

      @bigfly --batch-size设置1就行了,他会量化dataset.txt里全部
      记得是拿这里得数据集来量化

      QQ图片20230616102505.png

      发布在 V Series
      livpo
      livpo
    • 回复: 使用创龙A40i评估板,想做arm与FPGA sdio 通信,请问ARM的设备树配置在哪里呀?

      可以查阅tools/pack/chips/sun8iw11p1/configs/tlt3_a40i-evm目录下的fex文件。

      发布在 创龙科技专区
      livpo
      livpo
    • 回复: h616画内存的时候更改了其中一组数据线的排列顺序,uboot要不要一起改

      不需要,如果是组内改序没问题

      发布在 H/F/TV Series
      livpo
      livpo
    • 回复: T113-S3的VCC-TVIN/HPVCC未供电有影响吗

      HPVCC内置LDO外部无供电会开启,TVIN不需要可以不接

      发布在 其它全志芯片讨论区
      livpo
      livpo
    • 回复: Gaviar Handheld (小志掌機)

      小志掌机的意思是未来还会有中志、大志掌机吗🕺

      发布在 爱搞机专区
      livpo
      livpo
    • 回复: 有谁知道THS的efuse寄存器 在sid中的偏移地址?
      comment; Security ID#type; SID#base; SID 0x03006000#regdef; SID_RKEY0; 0x000; Securiy root key[31:0]#regdef; SID_RKEY1; 0x004; Securiy root key[63:32]#regdef; SID_RKEY2; 0x008; Securiy root key[95:64]#regdef; SID_RKEY3; 0x00C; Securiy root key[127:96]#regdef; SID_THS; 0x014; [27:16]: The calibration value of the T-sensor.#regdef; SID_DATA; 0x200 4;	SID data (xfel display as 'sid' replay)#regdef; BOOT_MODE; 0x210; [27:16]: eFUSE boot select status, [0]: 0: GPIO boot select, 1: eFuse boot select#regdef; SID_UNDOC; 0x214 507;#regdef; pad 0; 2560; Set i/o block size
      
      发布在 其它全志芯片讨论区
      livpo
      livpo
    • 回复: MQ T113 原理图上console接口和官方出的不是一个呢?原理图是uart3,官方硬件是uart0

      我用的mq-r v1.0的很小的板子,console用的uart0(PE2和PE3),你自己在sys config.fex里核对一下就好了。记得接地线。QQ图片20230605155336.jpg

      发布在 MR Series
      livpo
      livpo
    • 回复: 如何编译glibc库

      遵循以下步骤

      make工具

      注意由于AW服务器make版本为3.8.1,在编译glibc高版本时候不兼容,所以需要更新make工具。假如服务器make版本较高,可以不用更新make工具。

      74adce60b8464885a5dd61ee74ba04ce.jpg

      网址 http://ftp.gnu.org/pub/gnu/make ,下载最新版本4.3。解压后,对make工具进行安装。进入make-4.3源码目录,执行以下命令。

      # prefix 后面路径为make工具安装路径,这里我们指定安装到out目录下。
      ./configure --prefix=${path}
      make 
      make install
      

      9a2c99382e9f410f972896bb8d835d60.jpg

      安装完成,我们看到make 4.3版本

      76462bc8ce8843c18851fb1b53ae6006.jpg

      glibc源码下载

      网址 http://ftp.gnu.org/pub/gnu/glibc/ ,下载所需的glibc版本,注意gcc工具链版本和glibc版本需要匹配。

      如下图所示是准备好编译脚本env. sh,glibc各个版本源码。

      723697d50e5f4f1cbdb57e159e694c80.jpg

      env.sh是把所有编译步骤整合在一起的脚本,可以根据具体情况单独执行每条指令。

      打开脚本env.sh脚本。第4行是gcc位置,第5行是make工具位置(不需要安装高版本make可以去掉),第7行是glibc版本,第12行是glibc源码路径,第13行是glibc生成库文件路径,第14行是glibc编译过程产生中间文件存放路径,第16行是修改环境变量,使用我们自己的make和gcc工具。第30-33行,用于编译glibc。

      8b1ebd6d70be4655a7605128bee7fec2.jpg

      其中31行 --host=arm-none-linux-gnueabihf ,host填入值要和gcc匹配 ,否则会出差。

      5f2a16b347c3456080fa730db1f7da2d.jpg

      03eea564b5674b67a048d0ee1cd5bee7.jpg

      运行env.sh脚本

      env.sh

      ./env.sh
      

      注意下信息,我们可以看到glibc生成准备环境时候,已经使用了我们指定gcc工具链,make工具。

      98a88fec90ff4c018cf4421fae808ac2.jpg

      b994e54444474d3997fb351db376c330.jpg

      编译完成后,我们看到对应so库

      7d8beda4939c4dcb94d694b343f93d5e.jpg

      替换glibc,例如在我们测试demo,修改Makefile,指定到我们glibc版本路径即可

      重新编译,查看对应执行文件,看到已经使用对应版本版本glibc库

      strings main | grep glibc
      

      4e72c23a5e7646189ca264b87f0ef8b4.jpg

      版本匹配问题

      1、gcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabi版本,glibc 2.29以下版本都可以编译通过

      2、gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf版本,目前只在glibc 2.33编译通过,其他版本需测试。

      发布在 其它全志芯片讨论区
      livpo
      livpo
    • T113在内核中采用硬解jpeg方式实现开机动画

      参考几位大神的logo替换方法以及相关问题:

      1. https://bbs.aw-ol.com/topic/2217/
      2. https://bbs.aw-ol.com/topic/2546/
      3. .......

      主要实现思路:在kernel中,将jpg图片通过VE解码,连续显示形成动画。先将视频按帧截取成jpg图片,打包成特定格式的二进制文件。把资源包放入到一个指定分区中,在uboot阶段加载资源包,并告知kernel将资源包的内存区域保留出来。

      资源包制作

      int test_pic(int argc, char **argv)
      {
          FILE *fp_in;
          FILE *fp_out;
          int rc;
          char bmpfile[1024] = {0};
          char path_out[1024] = {0};
          int i = 0;
          char buffer[4096];
          unsigned int length = 0;
          int pic_num = 100;
          if (argc > 3)
          {
              pic_num = atoi(argv[3]);
          }
          printf("pic_num:%d\n", pic_num);
          sprintf(path_out, "%s", argv[2]);
          printf("output:%s\n", path_out);
      
          fp_out = fopen(path_out, "wb+");
          if (fp_out == NULL)
          {
              printf("Open file %s error\n", bmpfile);
              return (-1);
          }
          fwrite(&pic_num, 4, 1, fp_out);
          for (i = 0; i < pic_num; i++)
          {
              sprintf(bmpfile, "%s/1 (%d).jpg", argv[1], i + 1);
              fp_in = fopen(bmpfile, "rb");
              if (fp_in == NULL)
              {
                  printf("Open file %s error\n", bmpfile);
                  return (-1);
              }
              length = get_file_size(bmpfile);
              if (length < 1)
              {
                  printf(" file %s error\n", bmpfile);
                  return (-1);
              }
              fwrite(&length, 4, 1, fp_out);
      
              while (!feof(fp_in))
              {
                  rc = fread(buffer, 1, 1024, fp_in);
                  if (rc < 1)
                      printf("file %s error\n", bmpfile);
                  fwrite(buffer, 1, rc, fp_out);
              }
              fclose(fp_in);
          }
          fclose(fp_out);
          return 0;
      }
      

      将所有图片打包成一份二进制文件,并命名为animation.fex,文件内容格式如下:

      图片总数量 第一张图片大小(int) 第一张图片内容 第二张图片大小(int) 第二张图片内容 依此类推
      int int char 数组 int char 数组 。。。

      使用方法:

      ./bin/demo [图片路径] [资源包路径] [图片数量]
      

      如:

      ./bin/demo bin/Capture100/ bin/animation.fex 90
      

      log输出:

      pic_num:90
      output:bin/animation.fex
      

      资源包的制作和内核中读取的格式相对应,如有需要可自行拓展。

      资源包存放

      新建一个分区

      diff --git a/configs/demo2.0/longan/sys_partition.fex b/configs/demo2.0/longan/sys_partition.fex
      index c67aca3..1e12607 100755
      --- a/configs/demo2.0/longan/sys_partition.fex
      +++ b/configs/demo2.0/longan/sys_partition.fex
      @@ -68,9 +68,9 @@ size = 16384
      
       ;------------------------------>mmcblk0p6/nand0p6
       [partition]
      -    name         = recovery
      -    size         = 231072
      -    ;downloadfile = "recovery.fex"
      +    name         = animation
      +    size         = 102400
      +    downloadfile = "animation.fex"
           user_type    = 0x8000
      
       ;------------------------------>mmcblk0p7/nand0p7
      diff --git a/pack b/pack
      index d57362b..77e7b1f 100755
      --- a/pack
      +++ b/pack
      @@ -164,6 +164,7 @@ ${LICHEE_COMMON_CONFIG_DIR}/tools/cardscript.fex
       ${LICHEE_COMMON_CONFIG_DIR}/tools/cardscript_secure.fex
       ${LICHEE_CHIP_CONFIG_DIR}/tools/cardscript.fex
       ${LICHEE_CHIP_CONFIG_DIR}/tools/cardscript_secure.fex
      +${LICHEE_CHIP_CONFIG_DIR}/tools/animation.fex
       ${LICHEE_COMMON_CONFIG_DIR}/tools/cardtool.fex
       ${LICHEE_CHIP_CONFIG_DIR}/tools/cardtool.fex
       ${LICHEE_COMMON_CONFIG_DIR}/tools/usbtool.fex
      

      uboot修改

      合入补丁

      通过

      CONFIG_ANIMATION_MEM_RESERVE
      

      控制功能的开启关闭。

      从emmc读取整个分区,分区越大耗时越久,可适当减少分区大小。

      kernel修改
      合入补丁

      通过

      CONFIG_ANIMATION_MEM_RESERVE
      

      宏开启

      注意编解码VE和显示DE驱动代码的初始化的先后顺序

      T113_animation.7z

      发布在 其它全志芯片讨论区
      livpo
      livpo
    • t507+xr829 wifi可以但是蓝牙就是没有设备

      如题
      微信图片_20230522222637 (1).png

      发布在 其它全志芯片讨论区
      livpo
      livpo
    • 回复: 没有装载mmc驱动启动卡住

      @bayche 还真可以了,难道armbian先使用ramdisk启动ram文件系统装载了电源驱动才正常挂载mmc? 现在文件系统可能还有点问题

      发布在 H/F/TV Series
      livpo
      livpo
    • 没有装载mmc驱动启动卡住

      各位大佬,请教个问题,我拿armbian打过补丁的linux-5.19.4内核出来玩,启动的时候没有装载mmc驱动,然后一直卡在这了。是不是armbian使用ramdisk在哪里配置关闭了mmc的驱动加载?

      QQ图片20230404095536.png

      发布在 H/F/TV Series
      livpo
      livpo
    • 交叉编译NumCpp到ARM上的方法(以全志V853为例)

      前段时间,在电脑上安装了Ubuntu/Windows系统双系统,现在拿Ubuntu系统试试水。

      NumCpp是类似Numpy的C++版本,可以方便的进行一些矩阵的操作,现在我们来把它交叉编译到ARM上去。

      1. 获取源码

      要交叉编译NumCpp,首先要获取依赖库boost源代码以及NumCpp的源代码。

      在这里我使用的是boost1.68,可以从下面这个网址下载。
      https://www.boost.org/

      Boost C++ Libraries
      https://www.boost.org/
      

      NumCpp可以从GitHub上clone下来
      https://github.com/dpilger26/NumCpp

      GitHub - dpilger26/NumCpp: C++ implementation of the Python Numpy library
      C++ implementation of the Python Numpy library. Contribute to dpilger26/NumCpp development by creating an account on GitHub.
      https://github.com/dpilger26/NumCpp
      

      2. 交叉编译boost

      将下载好的压缩包解压。

      cd boost_1_68_0
      ./bootstrap.sh --with-libraries=all --with-toolset=gcc
      

      其中,--with-libraries可以选择自己想要安装的库。

      执行完这一步之后,打开新生成的project-config.jam,修改下面这几行中的gcc部分。一定要注意空格!(每一个空格缺一不可),其中的arm-openwrt-linux-gcc的路径可以换成你的交叉编译器的路径

      if ! gcc in [ feature.values <toolset> ]
      {
          using gcc : arm : /home/xinzhe/toolchains/rootfsbuilt/arm/toolchain-sunxi-musl-gcc-830/toolchain/bin/arm-openwrt-linux-gcc ; 
      }
      

      之后执行

      ./b2
      

      检查输出的log中的编译器是否已经是交叉编译器,然后再执行

      ./b2 install --prefix=/home/xinzhe/Documents/boost_arm
      

      其中--prefix后面是你想要的boost库安装路径。

      安装完成后,检查安装的boost库是否为ARM版本。

      3.交叉编译NumCpp

      Clone完成NumCpp之后,进入NumCpp文件夹。

      由于我之前编译过x86-64版本的NumCpp,因此在编译ARM版本的时候,需要修改CMakeLists.txt,让cmake找到ARM版本的boost库。

      在CMakeLists.txt中寻找Boost有关代码的上方加入

      set(CMAKE_FIND_ROOT_PATH /home/xinzhe/Documents/boost_arm)
      
      set(CMAKE_FIND_ROOT_PATH /home/xinzhe/Documents/boost_arm)
       
       
       
      if(NUMCPP_NO_USE_BOOST)
          target_compile_definitions(${ALL_INTERFACE_TARGET} INTERFACE -DNUMCPP_NO_USE_BOOST)
      else()
          find_package(Boost 1.68.0 REQUIRED 
              COMPONENTS 
              date_time
          )
          target_link_libraries(${ALL_INTERFACE_TARGET} INTERFACE 
              Boost::boost
              $<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:GNU>>:Boost::date_time>
          )
      endif()
      

      同时,在NumCpp文件夹里,创建一个Compile.cmake文件,来指定交叉编译器。内容如下:

      set(CMAKE_SYSTEM_NAME Linux)
      set(TOOLCHAIN_PATH /home/xinzhe/toolchains/rootfsbuilt/arm/toolchain-sunxi-musl-gcc-830/toolchain/arm-openwrt-linux-muslgnueabi)
      set(CMAKE_C_COMPILER /home/xinzhe/toolchains/rootfsbuilt/arm/toolchain-sunxi-musl-gcc-830/toolchain/bin/arm-openwrt-linux-gcc)
      set(CMAKE_CXX_COMPILER /home/xinzhe/toolchains/rootfsbuilt/arm/toolchain-sunxi-musl-gcc-830/toolchain/bin/arm-openwrt-linux-g++)
      

      其中的TOOLCHAIN_PATH、CMAKE_C_COMPILER、CMAKE_CXX_COMPILER替换成自己的交叉编译工具。

      然后在NumCpp文件夹下执行下面的操作

      mkdir build
      cd build
      cmake .. -DCMAKE_TOOLCHAIN_FILE=../Compile.cmake
      

      然后检查输出的log中,C编译工具是否为交叉编译工具,以及找到的boost库是否为我们刚刚创建的ARM版本的。

      检查完毕后,修改/NumCpp/build目录下的cmake_install.cmake,修改其中的CMAKE_INSTALL_PREFIX为自己想要安装的目录。

      # Install script for directory: /home/xinzhe/Documents/NumCpp
       
      # Set the install prefix
      if(NOT DEFINED CMAKE_INSTALL_PREFIX)
        set(CMAKE_INSTALL_PREFIX "/home/xinzhe/Documents/boost_arm")
      endif()
      string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
      

      然后执行:

      cmake --build . --target install
      

      我们就在boost_arm下得到了ARM版本的boost和ARM版本的NumCpp的编译结果文件

      4. 编译自己的代码

      创建NumCpp_arm文件夹,放入自己的main.cpp,并创建Compile.cmake(同上),CMakeLists.txt。

      其中CMakeLists.txt代码如下:

      cmake_minimum_required(VERSION 3.20)
       
      project("HelloWorld" CXX)
       
      add_executable(${PROJECT_NAME} main.cpp)
      set(CMAKE_FIND_ROOT_PATH /home/xinzhe/Documents/boost_arm)
      set(CMAKE_CXX_STANDARD 17)
      set(CMAKE_CXX_FLAGS "-g  -std=c++17 -lstdc++fs")
      find_package(NumCpp 2.10.1 REQUIRED)
      target_link_libraries(${PROJECT_NAME}
          NumCpp::NumCpp
          stdc++fs
      )
      

      其中的CMAKE_CXX_FLAGS的设置,以及stdc++fs添加到target_link_libraries里,是为了防止一下的报错。

      xinzhe@xinzhe-G3-3590:~/Documents/NumCpp/examples/NumCpp_arm/build$ make
      Consolidate compiler generated dependencies of target HelloWorld
      [ 50%] Linking CXX executable HelloWorld
      CMakeFiles/HelloWorld.dir/main.cpp.o: In function `std::filesystem::exists(std::filesystem::__cxx11::path const&)':
      main.cpp:(.text._ZNSt10filesystem6existsERKNS_7__cxx114pathE[_ZNSt10filesystem6existsERKNS_7__cxx114pathE]+0x1c): undefined reference to `std::filesystem::status(std::filesystem::__cxx11::path const&)'
      CMakeFiles/HelloWorld.dir/main.cpp.o: In function `std::filesystem::__cxx11::path::path<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::filesystem::__cxx11::path>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::filesystem::__cxx11::path::format)':
      main.cpp:(.text._ZNSt10filesystem7__cxx114pathC2INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_EERKT_NS1_6formatE[_ZNSt10filesystem7__cxx114pathC5INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES1_EERKT_NS1_6formatE]+0x60): undefined reference to `std::filesystem::__cxx11::path::_M_split_cmpts()'
      collect2: error: ld returned 1 exit status
      make[2]: *** [CMakeFiles/HelloWorld.dir/build.make:98: HelloWorld] Error 1
      make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/HelloWorld.dir/all] Error 2
      make: *** [Makefile:91: all] Error 2
      

      然后,我们执行一下操作

      mkdir build
      cd build
      cmake .. -DCMAKE_TOOLCHAIN_FILE=../Compile.cmake
      

      检查输出的log,交叉编译工具对不对,boost与NumCpp是否为ARM版本。

      最后执行

      make
      

      下面的是我的编译结果,可以看到编译成功

      xinzhe@xinzhe-G3-3590:~/Documents/NumCpp/examples/NumCpp_arm/build$ make
      [ 50%] Building CXX object CMakeFiles/HelloWorld.dir/main.cpp.o
      [100%] Linking CXX executable HelloWorld
      [100%] Built target HelloWorld
      

      检查一下生成的可执行文件是够为ARM版本。

      xinzhe@xinzhe-G3-3590:~/Documents/NumCpp/examples/NumCpp_arm/build$ file HelloWorld
      HelloWorld: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-armhf.so.1, with debug_info, not stripped
      

      5.移植到V853上

      将HelloWorld文件和boost_arm整个文件夹push到板子上

      xinzhe@xinzhe-G3-3590:~/Documents/NumCpp/examples/NumCpp_arm/build$ adb push HelloWorld /root
      HelloWorld: 1 file pushed. 3.6 MB/s (2607428 bytes in 0.684s)
      

      然后到HelloWorld所在目录下执行

      root@TinaLinux:~# export LD_LIBRARY_PATH=/root/boost_arm/lib:$LD_LIBRARY_PATH
      

      可以看到我的HelloWorld正常执行

      root@TinaLinux:~# ./HelloWorld
      [[0.452916, 0.119087, -0.459488, -0.733428, 0.374606, 0.244954, -0.237323, -0.109258, 0.907443, -0.413274, -0.157849, 0.158918, 0.0474297, -0.519952, 1.38254, -0.174767, -0.911914, -0.812675, -0.506005, -0.222257, -0.192745, -1.04207, 0.424627, 0.217617, 0.277484, -0.0261248, -0.0865481, -0.371074, -0.275607, 0.937942,
      

      到这里,交叉编译就完成啦,希望各位小伙伴也能顺利进行!

      原文链接:https://blog.csdn.net/where_are_u/article/details/129863901

      发布在 V Series
      livpo
      livpo
    • 回复: T113-s3 Register I2S (WM8782) ADC on ALSA

      @vvpnet Do you mean to look for paid consultation?

      发布在 其它全志芯片讨论区
      livpo
      livpo
    • 回复: T113交叉编译QT libudev.so.1报错,但路径下有该文件

      参照这里 :https://blog.csdn.net/qq_28877125/article/details/127098767
      把udev关掉了,我的这个配置是yes,关掉就可以了

      QQ图片20221209155016.jpg

      发布在 其它全志芯片讨论区
      livpo
      livpo
    • 回复: T113交叉编译QT libudev.so.1报错,但路径下有该文件

      @haaland
      路径应该是对的,库都在这里面
      QQ图片20221209153857.jpg

      编译出来的库1.6.3,这个183会不会是版本号?
      如果183是版本号,那估计就是版本低了
      QQ图片20221209153915.jpg
      QQ图片20221209153904.jpg

      发布在 其它全志芯片讨论区
      livpo
      livpo
    • T113交叉编译QT libudev.so.1报错,但路径下有该文件

      芒果的T113,交叉编译QT报错,找不到libudev.so.1,但是路径下文件实际是存在的,初步怀疑是udev的版本不对

      QQ图片20221209152528.jpg
      QQ图片20221209152545.jpg

      发布在 其它全志芯片讨论区
      livpo
      livpo
    • 回复: (送开发板~)看!是芒果派,他好像在玩一种很新的开发板

      真的好想要芒果派呀

      linux1.psd

      发布在 公告
      livpo
      livpo
    • 在MQ-R(F133)上 进行全志Melis-4.0(rt-thread内核)环境搭建与初步编译介绍

      什么是Melis?

      Melis是全志科技自研的一套rtos系统。自全志科技创建以来,该系统就已经问世,并持续抗战了近十年,其主要应用其自家的F系列芯片产品上,在MP3与老人机非常流行的时代,该系统配合着其F系列的芯片,真的是能抗能打,早在2012-2013年的时候,Melis的装机量就已经过亿,但因为其属于自研系统,全志科技并没有将其开源,导致虽装机量很多,但是很少人知道。
        Melis之所以能抗战那么久,或者说全志科技之所以能在那个芯片行业并不出彩的年代坚持下来,我觉得主要归功于其F1C100s/F1C200s这个代的芯片。这款芯片差不多是十年前的产品,但是因为其具有很强的编解码能力,以及异于常人的性价比,现如今依然活跃在各个微媒体市场。
        Melis经过了多个迭代,现如今配合着其最新推出的F133(risc-V)芯片,推出了最新的Melis4.0系统,并使用了更多人熟悉的RT-thread内核,在GitHub上,部分进行了开源,引领广大开发爱好者参与进risc-V的生态建设中。最近想用F133做一点有趣的开发,因此也开始研究Melis4.0。
        个人觉得,通过学习melis系统,可以让学习者更了解系统的构成,什么是系统调用?系统是如何加载模块的?什么是BSP?等,对于学习者来说,是非常不错的入门选择。

      开发环境

      • Ubuntu22.04虚拟机
      • MQ-R(F133) 芒果派开发板

      代码下载

      GitHub的项目地址如下:

      https://github.com/Tina-Linux/d1s-melis
      

      仓库的简介提示,如果需要编译代码,需要手动下载一下相应的工具链并将工具链放在对应目录里。

      工具链地址如下:

      https://github.com/Tina-Linux/d1s-melis/releases
      

      建议直接下载这个,因为工程中默认的也是这个

      866b889317404ca1b2f9ddc9e2eec3a7.png

      代码下载好后,解压。并将下载好并解压好的工具链放在代码的toolchain目录下。(我这里将原项目目录更名为了source,并不影响其它)

      59aa7ebbbda34e6b8e9e03fca377ef1b.png

      一切准备就绪后,即可开始编译。如果是新的系统,建议先安装一些依赖库,后续可能会用到。

      sudo apt install autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev
      

      编译

      环境变量

      在代码编译之前,我们可能需要设置很多环境变量(lunch 、croot、pack等),因为每一次的环境变量都是比较固定的,因此,项目中,将这些初始化环境变量的操作,都整合成了两个脚本,分别是"envsetup.sh"和“melis-env.sh”。因为melis-env.sh最终会自动调用“envsetup.sh”,因此,我们只需要执行“melis-env.sh”即可

      #初始化环境变量
      melis-env.sh
      

      初始化环境变量后,我们需要通过“lunch”来选择我们需要编译的项目,lunch是通过扫描projects文件夹下的文件夹,进行识别一共有多少套方案,lunch选中后,系统的编译参数、打包参数,运行参数等,就会使用对应方案文件夹中的配置文件。(具体为什么叫lunch,原因不详,或许本应该是launch?学习英语任重道远!)

      对应方案

      #通过lunch来选择要编译的项目
      lunch
      

      238c5f319f3f4294bd88fb32c7027bdb.png

      因为我使用的是麻雀的开发板,因此我这里选择3.

      编译

      以上流程走完后,原工程是可以直接make的,但是第一次编译,或者选择了不同方案后编译,建议都是要clean一下,重新lunch一次,避免环境不干净。

      #先clean一下
      make clean
      
      #再把方案清一下
      make distclean
      
      #重新lunch,再选择一次方案
      lunch
      
      #执行make操作
      make
      

      注意,如果你在kconfig中,增加了某些选项,但是没有在deconfig中增加对应的配置,直接make可能会报错。需要通过make menuconfig来重新生成默认的编译配置。

      #通过make menuconfig选择编译参数
      make menuconfig
      

      注意:curses.h: No such file or directory ,那是因为环境没弄好,“sudo apt install libncurses5-dev” 即可

      2326e51f410b4585ac031a1e9fb66b74.png

      第一次编译,直接保存即可。配置默认是保存在当前目录下的 “.config”文件中,最好不要改文件名。如果不想每次编译都make menuconfig,那么就将当前的“.config”的内容,更新到对应方案目录下的deconfig文件中。比如我要改的话,那我就需要将“.config”文件中的内容,全部替换到**“projects/d1s-mq/configs/deconfig”**文件中,这样每次lunch之后,系统默认来这里来拿编译参数。

      以上完成后,就可以直接make了,如果没改过任何东西的话,是可以直接编译通过的。如果不通过,可能要检查一下自己的环境是否安装完善,勤加百度,即可解决问题。

      打包

      编译成功后,可以通过pack,将编译好的文件,全部打包成一个.img的固件。
      因为固件可能是用于卡烧录的,用于nor烧录的,用于nand烧录的,根据烧录方式的不同,需要搭配不同的参数,默认是打包生成nor烧录的固件。

      #通过pack指令,打包生成固件(默认生成nor固件)
      pack
      
      #生成nand烧录固件
      pack -a nand
      
      #生成卡烧录的固件
      pack -a card
      

      最终的固件将会生成在“out/对应方案/”目录下。

      注意:如果出现如下错误:

      78a656727f054bd08345a4376815e359.png

      这个时候,打包是没有成功的,cd到对应目录下,查看文件夹下,又是存在这个dragon文件,有点神奇。其实是因为dragon这个程序是在32位机器上编译出来的,这是32位的程序,在64位的Ubuntu中运行需要提前安装32位的库。

      请执行操作:

      sudo dpkg --add-architecture i386
      sudo apt-get update
      sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 -y
      sudo apt install lib32z1 -y
      

      重新pack后,没有提示,打包成功。

      注意事项:

      • source melis-env.sh 的操作仅在当前终端有效,新开终端,或者关闭了终端后,需要重新source一下,才能进行下面的操作。

      • lunch操作与source操作一样,都是只对当前终端有效,每次打开新终端,都需要进行一次source、lunch。

      小贴士:

      source了之后,可以使用各种快捷调整指令,方便开发

      croot   回到项目根目录
      ckernel   跳转至kernel文件夹
      cmodoule  跳转至模块文件夹
      。。。(更多操作,可以看环境脚本“envsetup.sh”中的function有哪些)
      

      原文链接:https://blog.csdn.net/qq_43280079/article/details/127189338
      作者@waxly-

      发布在 MR Series
      livpo
      livpo
    • PhoenixSuit烧录工具四种烧录模式说明

      如图所示,分四种烧录模式分别是:单或多分区下载、保留数据升级、分区擦除升级和全盘擦除升级。

      下面对四种烧录模式进行说明:

      • 单或多分区下载:用户加载固件之后,会从固件信息读取到MBR表的分区信息,然后将每个分区名字显示在UI上提供可选择单或多个分区烧录,若全部不选择,则默认下载物理分区的boot0和boot1。
      • 保留数据升级:此模式仅擦除sys_partition配置的分区,但不包含udisk或user_data分区的数据。
      • 分区擦除升级:此模式仅擦除sys_partition配置的分区,与“保留数据升级”相反,擦除包含udisk或user_data。
      • 全盘擦除升级:顾名思义,就是将flash进行初始化,所有的数据将会被擦除

      a0d87316ca1242fb85d34709b0548588.jfif

      发布在 其它全志芯片讨论区
      livpo
      livpo
    • 回复: t113每次重启网卡的mac地址都是随机的

      @abcdef 在 kernel menuconfig下面
      QQ图片20220916140833.jpg QQ图片20220916140837.jpg

      发布在 MR Series
      livpo
      livpo
    • 回复: t113每次重启网卡的mac地址都是随机的

      @dort91011 是的,需要将md5加到内核里

      另外还有一个问题就是#define sunxi_get_soc_chipid(x) {}这里获取id的函数是空的,
      QQ图片20220915164600.jpg

      然后参考了一下全志其他的代码是用到了sunxi-sid.c里的,然后加了一下这个头文件,就可以获取到chipid了

      QQ图片20220915164605.jpg

      这样就没有上面的报错了

      发布在 MR Series
      livpo
      livpo
    • t113每次重启网卡的mac地址都是随机的

      请教下各位大佬,t113每次重启网卡的mac地址都是随机的,跟了内核后发现是这里失败了crypto_alloc_ahash

      QQ图片20220915164531.jpg

      内核打印Failed to alloc md5,错误内容如下

      QQ图片20220915164525.jpg

      有人遇到过这个问题吗

      发布在 MR Series
      livpo
      livpo
    • 回复: AP_MOD 参与编译STA,MON置0 程序一直重启的问题

      @xiaowenge XR872

      发布在 RTOS
      livpo
      livpo
    • AP_MOD 参与编译STA,MON置0 程序一直重启的问题

      QQ图片20220908104759.png
      QQ图片20220908104803.png

      输出如下,好像是在rtos环境下进行的编译

      XRADIO Skylark SDK 1.1.1 Sep  1 2022 07:05:27
      
      sram heap space [0x214794, 0x26dc00), total size 365676 Bytes
      cpu  clock 240000000 Hz
      HF   clock  40000000 Hz
      
      sdk option:
          XIP           : enable
          INT LF OSC    : enable
      
      mac address:
          efuse         : 00:00:00:00:00:00
          in use        : 28:0d:0f:b2:3f:64
      ====================================================================
      
      open ap mode 	----------------->
      
      
       enter ap mode ----------->
      
      en1: CTRL-EVENT-TERMINATING 
      WAR join_status:0
      15:14:59.761 
      wlan information ===================================================
      firmware:
          version : R-XR_C10.08.52.64_01.80 Jul  6 2019 20:05:10-P01.00.30
          buffer  : 12
      driver:
          version : XR_V02.05
      ====================================================================
      
      interface name: en1
      Using interface en1 with hwaddr 28:0d:0f:b2:3f:64 and ssid "AP-XRADIO"
      15:15:00.333 --------1-----------
      en1: interface state UNINITIALIZED->ENABLED
      en1: AP-ENABLED 
      [net INF] msg <wlan connected>
      [net INF] netif is link up
      [net INF] bring up netif
      
      exception:6 happen!!
      appouse default flash chip mJedec 0x0
      [FD I]: mode: 0x4, freq: 96000000Hz, drv: 0
      PMA: mode select:e
      15:15:00.473 
      wlan information ===================================================
      firmware:
          version : R-XR_C10.08.52.64_01.80 Jul  6 2019 20:05:10-P01.00.30
          buffer  : 12
      driver:
          version : XR_V02.05
      ====================================================================
      
      PMA: wlan mode:a
      
      platform information
      
      发布在 RTOS
      livpo
      livpo
    • 1
    • 2
    • 2 / 2