在实际生产过程使用一个固件加一个用户数据文件的形式搭配实现不同类型的产品生产. 目前有了解到的方法是编译时把 bin 文件包含到 fls 文件内, 而且操作非常繁琐, 这样的方法不可能在量产过程中使用的. 不知道有没有更简便的方法或工具写入用户数据?
查看更多
我现在手头没有工程了, 就改那几个地方就行, 你目前的问题是卡在哪一步了, 具体描述下
型号 w806
建议以下两种方式: 1. 可以通过脚本, 将数据打包 img 固件格式, 下载 img 固件时会自动将数据搬运到 flash 的指定位置. 2. 可以搭配应用软件通过类似串口 AT 指令的方式实现.
发布 问题
分享 好友
手机 浏览
回到 顶部
您好, 卡在下载进去 flash 没改变
目前用命令行下第二遍可以了, 不知道为什么
包含到 fls 文件里不管地址怎么改都没效果,
用命令行单独下 user. img 两次就可以了
不知道这样对量产有没有影响
要连续下两次, 中途不能复位
命令行下载是怎么下载, . sh 文件是不是没改全, 生成的 user. img 没有打包. fls 文件, 可以把. sh 文件贴出来看下.
@abcd {{aft_build_project. sh (uploading. . . ) }}
! /bin/sh
ProjName="W806"
signature=0
prikey_sel=0
code_encrypt=0
sign_pubkey_src=0
img_type=1
zip_type=1
sec_img_header=8002000
sec_img_pos=8002400
run_img_header=8010000
run_img_pos=8010400
upd_img_pos=8010000
user_img_header=8080000
user_img_pos=8080400
echo $ProjName
if [ $prikey_sel -gt 0 ]
then
let img_type=$img_type+32*$prikey_sel
fi
if [ $code_encrypt -eq 1 ]
then
let img_type=$img_type+16
fi
if [ $signature -eq 1 ]
then
let img_type=$img_type+256
fi
if [ $sign_pubkey_src -eq 1 ]
then
let img_type=$img_type+512
fi
echo $img_type
csky-elfabiv2-objcopy -O binary . /"$ProjName". elf . /"$ProjName". bin
if [ $code_encrypt -eq 1 ]
then
let prikey_sel=$prikey_sel+1
openssl enc -aes-128-ecb -in . /"$ProjName". bin -out . /"$ProjName"_enc. bin -K 30313233343536373839616263646566 -iv 01010101010101010101010101010101
openssl rsautl -encrypt -in . . /Tools/ca/key. txt -inkey . . /Tools/ca/capub_"$prikey_sel". pem -pubin -out key_en. dat
cat "$ProjName"_enc. bin key_en. dat "$ProjName"_enc_key. bin
cat "$ProjName"_enc_key. bin . . /Tools/ca/capub_"$prikey_sel"_N. dat "$ProjName"_enc_key_N. bin
. . /Tools/wm_tool. exe -b . /"$ProjName"_enc_key_N. bin -o . /"$ProjName" -it $img_type -fc 0 -ra $run_img_pos -ih $run_img_header -ua $upd_img_pos -nh 0 -un 0
else
. . /Tools/wm_tool. exe -b . /"$ProjName". bin -o . /"$ProjName" -it $img_type -fc 0 -ra $run_img_pos -ih $run_img_header -ua $upd_img_pos -nh 0 -un 0
fi
mkdir -p . . /Output
mv . /"$ProjName". map . . /Output/"$ProjName". map
if [ $signature -eq 1 ]
then
openssl dgst -sign . . /Tools/ca/cakey. pem -sha1 -out "$ProjName"_sign. dat . /"$ProjName". img
cat "$ProjName". img "$ProjName"_sign. dat "$ProjName"_sign. img
mv . /"$ProjName"_sign. img . . /Output/"$ProjName"_sign. img
#when you change run-area image's ih, you must remake secboot img with secboot img's -nh address same as run-area image's ih
. . /Tools/wm_tool. exe -b . . /Tools/W806_secboot. bin -o . . /Tools/W806_secboot -it 0 -fc 0 -ra $sec_img_pos -ih $sec_img_header -ua $upd_img_pos -nh $run_img_header -un 0
cat . . /Tools/"$ProjName"_secboot. img . . /Output/"$ProjName"_sign. img . . /Output/"$ProjName". fls
else
mv . /"$ProjName". img . . /Output/"$ProjName". img
#when you change run-area image's ih, you must remake secboot img with secboot img's -nh address same as run-area image's ih
. . /Tools/wm_tool. exe -b . . /Tools/W806_secboot. bin -o . . /Tools/W806_secboot -it 0 -fc 0 -ra $sec_img_pos -ih $sec_img_header -ua $upd_img_pos -nh $run_img_header -un 0
. . /Tools/wm_tool. exe -b . . /bin/user. bin -o . . /bin/user -it $img_type -fc 0 -ra $user_img_pos -ih $user_img_header
cat . . /Tools/"$ProjName"_secboot. img . . /Output/"$ProjName". img . . /bin/user. img . . /Output/"$ProjName". fls
fi
produce compressed ota firmware*/
if [ $zip_type -eq 1 ]
then
if [ $signature -eq 1 ]
then
else
. . /Tools/wm_tool. exe -b . . /Output/"$ProjName". img -o . . /Output/"$ProjName" -it $img_type -fc 1 -ra $run_img_pos -ih $run_img_header -ua $upd_img_pos -nh 0 -un 0
mv . . /Output/"$ProjName"_gz. img . . /Output/"$ProjName"_ota. img
fi
fi
openssl --help
@abcd 命令行指的是在 CMD 调用 wm_tool. exe, 如下
wm_tool. exe -c COM4 -ws 115200 -ds 2000000 -rs none -dl user. img
wm_tool. exe -c COM4 -ws 115200 -ds 2000000 -rs none -dl user. img
@fyd 你这个目录都改了, 但看起来没啥问题, 应该是已经生效了, 每次 CDK 编译都会把 user. bin 合到 flash 文件里烧录, 怎么判断没改变的?
@fyd 你的下载工具 Upgrade_Tools 是最新版本的吗
@abcd 我把数据做到屏幕上了, 能直接看到 flash 的内容