您尚未登录。

楼主 # 2022-02-10 20:02:29

哇酷小二
管理员
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,387
积分: 1902
个人网站

用buildroot自带的genimage把tina dragon的活干完,让dragon无活可干。 (转)

转载地址: 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却没有对应的烧卡软件,尴尬了。。。





离线

楼主 #1 2022-02-10 20:02:46

哇酷小二
管理员
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,387
积分: 1902
个人网站

Re: 用buildroot自带的genimage把tina dragon的活干完,让dragon无活可干。 (转)

经过一番研究,加上学习韦老师的 buildroot 帖子, 研究出了一个genimage打包方法,可以打包成烧录二进制文件,用 dd 命令直接写TF卡即可。





离线

楼主 #2 2022-02-10 20:03:38

哇酷小二
管理员
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,387
积分: 1902
个人网站

Re: 用buildroot自带的genimage把tina dragon的活干完,让dragon无活可干。 (转)

假如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 系统。





离线

楼主 #3 2022-02-10 20:05:25

哇酷小二
管理员
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,387
积分: 1902
个人网站

Re: 用buildroot自带的genimage把tina dragon的活干完,让dragon无活可干。 (转)

有一个小问题, Ubuntu 没有 genimage 命令,需要自己编译,如果你编译过 buildroot 可以直接用,如果没有编译过,那么需要自己手动编译一个:

https://github.com/pengutronix/genimage





离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn