1. root file-system
buildroot를 이용하여 루트 파일시스템을 만든다.
git clone https://github.com/buildroot/buildroot.git
make zynq_zc706_defconfig
make
<path-to-buildroot>/output/target 의 내용을 sd-card에 복사할 것이다.
2. busybox
busybox로 파일시스템 만든다.
git clone https://github.com/mirror/busybox.git
cd busybox
export ARCH=arm64
export CROSS_COMPILE=arm-linux-gnueabihf-
make defconfig
config까지 완료되면 make menuconfig로 추가해야 할 설정이 있다.
Settins-->Build Static binary(no share libs)를 설정해야 라이브러리를 배치하는 수고를 덜 수 있다.
make
make install
<path-to-busybox>/_install/ 이 생성된다.
_install/etc/init.d/rcS를 작성한다.
cd _install
mkdir proc sys dev run etc dev/pts etc/init.d
sudo mknod -m 666 dev/null c 1 3
sudo mknod -m 600 dev/console c 5 1
리눅스 init process로 sbin/init를 실행하기 위해서 _install/etc/init.d/rcS 파일을 작성해야 한다. 또한 터미널 tty를 이용하기 위한 디바이스 노드도 작성한다.
#!/bin/sh
#/etc/init.d/rcS
mount -v --bind /dev /dev
mount -v --bind /dev/pts /dev/pts
mount -vt proc proc /proc
mount -vt sysfs sysfs /sys
mount -vt tmpfs tmpfs /run
/sbin/mdev -s
rcS파일은 chmod +x로 실행 가능하도록 만들어 준다.
cpio로 디렉터리를 아카이브 파일로 변환해야 한다.
make install로 생성된 _install 디렉터리로 이동하여 new ASCII포맷으로 아카이브 생성한다.
find . | cpio -H newc -ov --owner root:root -F ../initramfs.cpio
gzip으로 압축한다.
cd ../
gzip initramfs.cpio
initramfs.cpio.gz를 u-boot에서 인식할 수 있도록 u-boot-xlnx/tools/mkimage 툴을 이용하여 파일을 변환한다. u-boot대응 이미지파일의 이름은 uRamdisk로 한다.
./u-boot-xlnx/tools/mkimage -A arm64 -O linux -T ramdisk -d initramfs.cpio.gz uRamdisk
3. Linux-xlnx
git checkout xilinx-v2019.2.01
make distclean //설정제거
make clean
export CROSS_COMPILE=arm-linux-gnueabihf-
export ARCH=arm
make xilinx_zynq_defconfig
make menuconfig // 상세 설정 필요
make UIMAGE_LOADADDR=0x8000 uImage // 빌드하고, U-boot 헤더를 붙힌다
make menuconfig에서 여러가지 드라이버를 추가한다.
(1) SPI ROM driver
Top >> Device Drivers >> Memory Technology Device(MTD) support >> Self-contained MTD device drivers
check-in : Support most SPI Flash chips(AT26DF, M25P...)
(2) RTC driver
Top >> Device Drivers >> Real Time Clock >> I2C RTC drivers
GigaZee 보드의 경우,
check-in : intersil ISL12022
Zynqberry는 RTC가 없기 때문에 RTC 설정은 생략한다.
(3) USB Host driver
Device Driver >> USB support check-in : USB announce new device OTG support USB ULPI PHY interface support(4) USB Lanzynqberry에는 USB-LAN 칩이 연결되어 있다.Device Drivers >> Network Device Supportcheck-in : USB Network Adapterscheck-in : Multi-purpose USB Networking Frameworkcheck-in : SMSC LAN95XX based USB 2.0 10/100 ethernet devices
(5) USB-Wifi
Networking support >> Wireless >> cfg80211(check) >> 하부항목 모두 체크(Generic IEEE802.11은 반드시 체크)
Device Drivers >> Network Device Support >>WirelessLAN 에 항목이 새로 추가되었다.Ralink 칩은 모두 선택.
(6) Frame-BufferHDMI 출력용.Device Drivers >> Graphics support >> Framebuffer Devices >> Simple Framebuffer support(check)Vivado 프로젝트 수정, Device Tree 수정, Virits FSBL 초기화코드 수정이 필요하다.
4. SD Card 파티션/준비
sudo fdisk /dev/mmcblk0/dev/mmcblk0p1 2048 206847 204800 100M c W95 FAT32 (LBA)
/dev/mmcblk0p2 206848 59406335 59199488 28.2G 83 Linux
# FAT32 for boot partition
$ sudo mkfs.vfat -F 32 -n boot /dev/mmcblk0p1
# ext4 for root partition
$ sudo mkfs.ext4 -L root /dev/mmcblk0p2
mkdir -pv /mnt/sd-boot
mkdir -pv /mnt/sd-root
mount /dev/mmcblk0p1 /mnt/sd-boot
mount /dev/mmcblk0p2 /mnt/sd-root
linux-xlnx에서 만든 uImage(linux-xlnx/arch/arm/boot/), busybox에서 만든 uRamdisk를 /mnt/sd-boot/에 복사한다.
buildroot에서 만든 target/ 을 /mnt/sd-root/ 에 복사한다.u-boot-xlnx에서 만든 zynq-zynqberry.dtb(u-boot-xlnx/arch/arm/dts/)를 /mnt/sd-boot/ 에 복사한다.
umount /mnt/{sd-boot,sd-root}
참고로 zynq-zynqberry.dtb는 직접 만들 수 있다.
vivado에서 만든 xsa을 Vitis를 통해 Device Tree를 생성한 후, dtc로 빌드하면 된다.
5. Boot
sdcard를 zynqberry 보드에 넣는다.zynqberry에 USB 연결하여 전원 공급한다. u-boot 부팅을 확인한다.u-boot 스크립트를 입력한다. (스크립트 파일을 만들어 자동 부팅할 수 있다)
fatload mmc 0:1 ${kernel_addr_r} uImage
fatload mmc 0:1 ${ramdisk_addr_r} uRamdisk
fatload mmc 0:1 ${fdt_addr_r} zynq-zynqberry.dtb
setenv bootargs "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk
rootfstype=ext4 rootwait devtmpfs.mount=1"
bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}
u-boot 스크립트를 boot.scr로 생성, sd card의 boot 파티션에 넣어서, flash ROM에서 u-boot을 불러와 실행할 때 실행하기 위해서는 make menuconfig에서 Boot Options >> Boot media >> Support for booting from SD/EMMC 체크 하면 된다.
'Xilinx SoC > Zynqberry' 카테고리의 다른 글
[NEW] Vitis 2019.2 u-boot Flash-Rom에서 부팅 (0) | 2023.05.14 |
---|---|
6.리눅스 디바이스 트리 파일 만들기 (0) | 2022.05.07 |
2-1. Vitis 프로젝트 소스 수정하기 (0) | 2022.05.07 |
4. BOOT.BIN 만들고, Program Flash 하기 (1) | 2022.05.07 |
3. U-BOOT 빌드하기 (0) | 2022.05.07 |