O Uboot passa argumentos para o kernel!

1

Como pode uboot passar o argumento da linha de comando para o kernel? Eu fiz um pouco de googling e fiquei sabendo que ele usa a variável de ambiente bootargs . Lá foi mencionado que setenv bootargs key=value . Como estou usando bash e não tenho setenv , fiz isso usando export bootargs="value" . Mas isso não está afetando nada. Eu verifiquei em /proc/cmdline os argumentos permanecem os mesmos. Alguma ideia do que estou fazendo errado?

    
por Thushi 28.07.2015 / 16:10

3 respostas

2

Existem duas maneiras de passar argumentos ao kernel:  1. Compile-os por dentro.  2. Use o gerenciador de inicialização

Primeiro, verifique se seus argumentos não estão compilados no kernel. O segundo comando setenv que você encontrou não é um comando bash, mas um comando load loader. Depende de como determinado dispositivo feito, mas geralmente há uma partição em algum armazenamento interno (memória flash do seu dispositivo, não no host) onde o bootloader lê parâmetros ou arquivo no sistema de arquivos e o u-boot toma configuração a partir daí.

Outra maneira é conectar seu dispositivo via cabo e usar uma maneira específica do dispositivo para ativar o bootloader e alterar interativamente suas configurações.

Não é realmente trivial se você não estiver familiarizado com seu esquema de inicialização de dispositivo específico. Nomeie seu dispositivo, isso pode ajudar a responder sua pergunta.

    
por 28.07.2015 / 16:51
1

Você pode usar um arquivo uEnv.txt em sua partição de inicialização para especificar argumentos para a inicialização. Este é um exemplo para dispositivos Xilinx zynq-7000 da camada yocto meta-zybo:

kernel_image=uImage
devicetree_image=zybo-zynq7.dtb
bootargs=console=ttyPS0,115200 root=/dev/mmcblk0p2 rw rootwait earlyprintk
uenvcmd=echo Copying Linux from SD to RAM... && fatload mmc 0 0x3000000 ${kernel_image} && fatload mmc 0 0x2A00000 ${devicetree_image} && bootm 0x3000000 - 0x2A00000

Ele especifica a árvore de dispositivos a ser usada (você não precisa fazer isso se você é chamado device_tree.dtb ) seguido por um conjunto de argumentos para o kernel.

Você pode encontrar mais informações sobre o uso de uEnv.txt aqui

    
por 28.07.2015 / 16:40
0

você pode passar seus arquivos de inicialização através do arquivo uEnv.txt, além de seus arquivos no cartão SD.

você precisa destes arquivos para boot: BOOT.bin (carrega fsbl e uboot), bitstream.bit (seu bitstream que carrega para PL, uImage (kernel Linux compilado), devicetree.dtb (endereço dos drivers que o linux lê ele), uramdisk.image.gz (arquivos linux após a inicialização).

você pode carregá-los no seu DDR com estes comandos:

bootargs=console=ttyPS0,115200 root=/dev/ram rw earlyprintk
load_image=fatload mmc 0 ${kernel_load_address} ${kernel_image} && 
fatload mmc 0 ${devicetree_load_address} ${devicetree_image} && 
fatload mmc 0 ${ramdisk_load_address} ${ramdisk_image} uenvcmd=run mmc_loadbit_fat && 
echo Copying Linux from SD to RAM... && 
run load_image && 
bootm ${kernel_load_address} ${ramdisk_load_address} ${devicetree_load_address}

também se você quiser carregar outros arquivos linux da partição ext4 do SD, você pode usar este comando em uEnv.txt :

bootargs=console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0
load_image=fatload mmc 0 ${kernel_load_address} ${kernel_image} && 
fatload mmc 0 ${devicetree_load_address} ${devicetree_image} uenvcmd=run mmc_loadbit_fat && 
echo Copying Linux from SD to RAM... && 
mmcinfo &&  run load_image && 
bootm ${kernel_load_address} - ${devicetree_load_address}
    
por 03.09.2018 / 08:42