转载地址: https://bbs.aw-ol.com/topic/1022
转载地址: https://debugdump.com/topic/1022
最终生成烧录的 img 文件是通过 scripts/pack_img.sh 的 do_finish()的 dragon命令:
function do_finish()
{
...
if [ -f sys_partition_for_dragon.fex ]; then
do_dragon image.cfg sys_partition_for_dragon.fex
else
do_dragon image.cfg
fi
...
}
function do_dragon()
{
local partition_file_name="x$2"
if [ $partition_file_name != "x" ]; then
echo "===================================="
echo "show \"$2\" message"
show_partition_message $2
fi
do_check_pack_file
dragon $@
if [ $? -eq 0 ]; then
if [ -e ${IMG_NAME} ]; then
mv ${IMG_NAME} ../${IMG_NAME}
echo "----------${image_instruction}----------"
echo '----------image is at----------'
echo -e '\033[0;31;1m'
echo ${ROOT_DIR}/${IMG_NAME}
echo -e '\033[0m'
if [ $PACK_HOOK ]
then
$PACK_HOOK ${ROOT_DIR}/${IMG_NAME}
fi
fi
fi
# you can add scripts/.hooks/post-dragon to do something after dragon
# for example, you can copy img to another dir, add post-dragon like this:
#
# echo "==========post-dragon========"
# cp ${ROOT_DIR}/${IMG_NAME} ~/myimgs/
# echo "==========post-dragon done========"
#
[ -e ${PACK_TOPDIR}/scripts/.hooks/post-dragon ] &&
source ${PACK_TOPDIR}/scripts/.hooks/post-dragon
}
以芒果派麻雀为例, pack 命令执行之后,最终生成了 out/d1-mangopi_mq_rgb800x480_gt9xx/tina_d1-mangopi_mq_rgb800x480_gt9xx_uart0.img 烧录文件。
这个*.img文件可以通过 PhoenixSuit 在 Windows 通过USB线烧录,或者通过 LiveSuit 在 Linux 烧录。也可以在Windows用 PhoenixCard.exe 烧到卡上,但是Linux却没有对应的烧卡软件,尴尬了。。。
离线
假如tina 的分区文件是 sys_partition.fex:
;---------------------------------------------------------------------------------------------------
; 说明: 脚本中的字符串区分大小写,用户可以修改"="后面的数值,但是不要修改前面的字符串
;---------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------
; 固件下载参数配置
;---------------------------------------------------------------------------------------------------
;***************************************************************************************************
; mbr的大小, 以Kbyte为单位
;***************************************************************************************************
[mbr]
size = 252
;***************************************************************************************************
; 分区配置
;
;
; partition 定义范例:
; [partition] ; //表示是一个分区
; name = USERFS2 ; //分区名称
; size = 16384 ; //分区大小 单位: 扇区.分区表示个数最多2^31 * 512 = 2T
; downloadfile = "123.fex" ; //下载文件的路径和名称,可以使用相对路径,相对是指相对于image.cfg文件所在分区。也可以使用绝对路径
; keydata = 1 ; //私有数据分区,重新量产数据将不丢失
; encrypt = 1 ; //采用加密方式烧录,将提供数据加密,但损失烧录速度
; user_type = ? ; //私有用法
; verify = 1 ; //要求量产完成后校验是否正确
;
; 注:1、name唯一, 不允许同名
; 2、name最大12个字符
; 3、size = 0, 将创建一个无大小的空分区
; 4、align to logical block size(504 sectors), leb size = 2*(1 nand phy block size - 1 phy page size)
;***************************************************************************************************
[partition_start]
[partition]
name = boot-resource
size = 8064
downloadfile = "boot-resource.fex"
user_type = 0x8000
[partition]
name = env
size = 504
downloadfile = "env.fex"
user_type = 0x8000
[partition]
name = env-redund
size = 504
downloadfile = "env.fex"
user_type = 0x8000
[partition]
name = boot
size = 20664
downloadfile = "boot.fex"
user_type = 0x8000
[partition]
name = rootfs
; size = 40824
size = 131072
downloadfile = "rootfs.fex"
user_type = 0x8000
[partition]
name = dsp0
size = 1008
downloadfile = "dsp0.fex"
user_type = 0x8000
[partition]
name = recovery
size = 28224
;downloadfile = "recovery.fex"
user_type = 0x8000
那么我们可以生成对应的 genimage.cfg 文件:
image whycanpi0a_d1s_sdcard.img {
hdimage{
gpt = true
gpt-location = 1M
}
partition boot0 {
in-partition-table = "no"
image = "boot0_sdcard.fex"
offset = 8K
}
partition boot-packages {
in-partition-table = "no"
image = "boot_package.fex"
offset = 16400K
}
partition boot-resource {
partition-type = 0xC
image = "boot-resource.fex"
size = 4032K
}
partition env {
image = "env.fex"
size = 252K
}
partition env-redund {
image = "env.fex"
size = 252K
}
partition boot {
image = "boot.fex"
size = 10332K
}
partition rootfs {
image = "rootfs.fex"
size = 64M
}
partition dsp0 {
image = "dsp0.fex"
size = 504K
}
partition recovery {
image = "recovery.fex"
size = 14112K
}
}
此 genimage.cfg 可以放到 out/d1-mangopi_mq_rgb800x480_gt9xx/image/ 目录。
然后执行:
/opt/D1/buildroot-2021/output/host/bin/genimage --config genimage.cfg --rootpath mktemp -d --tmppath mktemp -d --inputpath $PWD --outputpath $PWD
然后就可以生成: whycanpi0a_d1s_sdcard.img 文件了,直接把该文件 dd 到 TF卡即可以引导D1s Tina Linux 系统。
离线
离线