uboot
커널에 명령줄 인수를 전달하는 방법은 무엇입니까 ? 인터넷 검색을 해보니 bootargs
환경 변수를 사용하는 것으로 나타났습니다. 거기에 언급된 setenv bootargs key=value
. 사용하고 bash
있는데 없어서 setenv
사용하고 export bootargs="value"
있는데 별 영향은 없습니다. 내가 확인한 매개변수는 /proc/cmdline
동일하게 유지됩니다. 내가 뭘 잘못하고 있는지 아시나요?
답변1
uEnv.txt
부팅 파티션의 파일을 사용하여 부팅 매개변수를 지정할 수 있습니다. 다음은 yocto Meta-Zybo 레이어의 Xilinx zynq-7000 장치의 예입니다.
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
사용할 장치 트리를 지정하고(장치 트리가 호출되는 경우에는 필요하지 않음 device_tree.dtb
) 커널 매개변수 세트가 뒤따릅니다.
이용에 대한 자세한 정보를 확인하실 수 있습니다.uEnv.txt
여기
답변2
매개변수를 커널에 전달하는 방법에는 두 가지가 있습니다. 1. 매개변수를 내부적으로 컴파일합니다. 2. 부트로더 사용
따라서 먼저 매개변수가 커널에 컴파일되지 않았는지 확인하세요. 두 번째로 찾은 setenv 명령은 bash 명령이 아니라 bootloader 명령입니다. 특정 장치가 어떻게 만들어졌는지에 따라 다르지만 일반적으로 부트로더가 파일 시스템의 매개변수나 파일을 읽는 일부 내부 저장소(호스트가 아닌 장치의 플래시 메모리)에 파티션이 있고 u-boot 구성을 가져옵니다. 거기에서.
또 다른 방법은 케이블을 통해 장치를 연결하고 장치별 방법을 사용하여 부트로더 프롬프트를 표시하고 대화형으로 설정을 변경하는 것입니다.
특정 장치 부팅 시나리오에 익숙하지 않은 경우 이는 작은 일이 아닙니다. 장치 이름을 지정하면 질문에 대한 답변에 도움이 될 수 있습니다.
답변3
SD 카드의 파일 외에도 uEnv.txt 파일을 통해 시작 파일을 전달할 수도 있습니다.
부팅하려면 다음 파일이 필요합니다: ( BOOT.bin
fsbl 및 uboot 로드), bitstream.bit
(PL에 로드된 비트스트림, uImage
(컴파일된 Linux 커널), devicetree.dtb
(Linux가 드라이버를 읽는 주소), uramdisk.image.gz
(부팅 후 Linux 파일).
다음 명령을 사용하여 DDR에 로드할 수 있습니다.
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}
또한 SD의 ext4 파티션에서 다른 Linux 파일을 로드하려면 다음 명령을 사용할 수 있습니다 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}