A resposta curta para queimar o u-boot no mmc é provavelmente
tftp ${loadaddr} u-boot.bin
mmc partconf 0 ${emmc_boot_ack} ${emmc_boot_part} 1
mmc write ${fileaddr} 0 800
mmc partconf 0 ${emmc_boot_ack} ${emmc_boot_part} 0
mas depende de como você configurou o mmc. Este comando irá escrever 1048576 (0x800 * 512) bytes de $ {fileaddr} para o mmc iniciando no endereço 0.
Para uma resposta mais longa e completa ao escrever o mmc. Vamos dizer que você vai configurar o mmc da maneira que o fabricante sugere.
| u-boot[0] | DT[0x680] | Kernel[0x800] | FS[0x8000] |
Vamos supor que você já tenha os arquivos necessários, caso contrário, você pode construir esses arquivos com o Yocto. Eu posso fornecer detalhes sobre isso, se quiser.
u-boot.bin, imx6ul-txul-0011.dtb, uImage, rootfs.tar.bz2, modules.tgz
Vamos supor também que você já tenha, pelo menos, s-carregado o u-boot, parece que você está rodando de alguma forma.
A primeira coisa que você precisa para particionar o mmc. Você não pode fazer isso a partir do u-boot, então você precisa configurar uma inicialização de rede. Parece que você já tem um servidor tftp com seus arquivos nele, você também precisará configurar um servidor nfs e extrair rootfs para lá. Digamos que você configure seu sistema de arquivos do servidor nfs em / nfsroot. Defina as seguintes variáveis para ativar o net boot.
env default -a
env set bootdelay 3
env set serverip 192.168.1.99
env set nfs_server 192.168.1.99
env set ipaddr 192.168.1.90
env set netmask 255.255.255.0
env set bootfile uImage
env set nfsroot /nfsroot
env set boot_mode net
env set default_bootargs setenv bootargs init=/bin/sh console=ttymxc0,115200 ro debug panic=1 ${append_bootargs}
save
Inicialize o prompt do Linux e, a partir daí, execute
fdisk /dev/mmcblk0
e partições de configuração da seguinte forma
Partition Start Cyl End Cyl Start Sector End Sector Type
1 33 512 2048 32767 0x0c
2 513 - 32768 - 0x83
Volte para o u-boot e agora você poderá ver suas partições
> mmc part
Partition Map for MMC device 0 -- Partition Type: DOS
Part Start Sector Num Sectors UUID Type
1 2048 30720 00ee66ee-01 0c
2 32768 7700480 00ee66ee-02 83
Observe que a partição 1 começa no setor 2048, que é 0x800. Partição 2 inicia em 32768 que é 0 x 8000. Agora você deve ver de onde vêm esses números.
Atualizamos o u-boot.bin com os comandos acima, mas observe que ele também sobrescreve a Tabela de Dispositivos (DT). Então, para atualizar o DT, use
tftp ${fdtaddr} imx6ul-txul-0011.dtb
mmc partconf 0 ${emmc_boot_ack} ${emmc_boot_part} 1
mmc write ${fdtaddr} 0x680 80
mmc partconf 0 ${emmc_boot_ack} ${emmc_boot_part} 0
Também pode haver uma variável de ambiente definida com estes comandos, $ {fdtsave} , se assim for, você pode usar apenas
run fdtsave
Para atualizar as partições, você precisará criar as imagens de disco na sua caixa linux, então tftp para o TX6UL e gravá-las com o comando mmc write. Para criar a imagem para a primeira partição, você poderia usar esses comandos na sua caixa linux.
dd if=/dev/zero of=part1.image bs=15728640 count=0 seek=1
/sbin/mkfs -t vfat part1.image
sudo mkdir /mnt/mkpart
sudo mount -o loop part1.image /mnt/mkpart
cp uImage /mnt/mkpart/uImage
sudo umount /mnt/mkpart
Então, no u-boot
tftp ${loadaddr} part1.image
mmc write ${fileaddr} 800 7800
Você pode ver o conteúdo da partição usando o u-boot usando
> fatls mmc 0:1
3676512 uimage
1 file(s), 0 dir(s)
Similarmente para a segunda partição, da sua caixa linux use algo como
dd if=/dev/zero of=part2.image bs=64M count=0 seek=1
/sbin/mkfs -t ext3 part2.image
sudo mkdir /mnt/mkpart
sudo mount -o loop part2.image /mnt/mkpart
sudo tar -C /mnt/mkpart -xjf rootfs.tar.bz2
sudo tar -C /mnt/mkpart -xzf modules.tgz
ln -s sbin/init /mnt/mkpart/linuxrc
sudo umount /mnt/mkpart
E a partir do u-boot
tftp ${loadaddr} part2.image
setexpr fs ${filesize} + 1ff
setexpr fs ${fs} / 200
mmc write ${fileaddr} 8000 ${fs}
Se você quiser ver o conteúdo da segunda partição do u-boot
> ext2ls mmc 0:2
Para inicializar a partir das novas partições, configure init de volta ao normal nos argumentos de inicialização
env set default_bootargs setenv bootargs init=/linuxrc console=ttymxc0,115200 ro debug panic=1 ${append_bootargs}
save
E não se esqueça de alterar o id da partição ou a variável env para apontar para o novo sistema de arquivos. Neste caso,
env set rootpart_uuid 00ee66ee-02
save
Espero que isso ajude.