Posting ini bertujuan untuk menjelaskan secara singkat program demo pada zedboard yang menggunakan OS linux, dengan memahami demo singkat ini diharapkan dapat mengasah indra keenam pada tahap implementasi Linux selanjutnya. Untuk mempersingkat waktu, maka perlu untuk mendownload software demo yang akan dijalankan pada SD card (klik disini untuk mendownload). Hasil extract file tersebut akan berisi sd_image folder dan folder-folder lainnya. Kopikan file di dalam sd_image folder tersebut ke dalam root SD card yang akan digunakan pada zedboard, sehingga SD card akan berisi BOOT.bin, devicetree_ramdisk.dtb, zImage, dan ramdisk8M.image.
Masukkan SD card yang telah berisi file file diatas ke dalam slot SD card zedboard kemudian hubungkan port serial uart zedboard dengan komputer melalui kabel usb, Pastikan SD Card boot terpilih dengan menset jumper JP7 – JP11. Power on zedboard dan jalankan Tera Term (atau bisa program serial lainnya) pada komputer dengan setting sebagai berikut:
Baud rate : 115200
Data : 8 bit
Parity : none
Stop : 1 bit
Flow control : none
Apabila proses init selesai, maka kita dapat memasukkan perintah melalui console. Untuk mengetahui script script yang dapat dijalankan pada demo kali ini maka dapat merujuk pada /usr/bin. Beberapa controh script yang dapat dicoba antara lain :
zynq>read_sw #Berguna untuk membaca state dari GPIO switch
zynq>write_led 0xFF #Berguna untuk menghidupkan ke 8 LED yang ada
dan masih banyak lagi yang bisa diexplore…….
##################################################################################################
Berikut adalah sedikit penjelasan mengenai file file yang diperlukan untuk booting dengan Linux pada zedboard
1. BOOT.bin
merupakan file yang terdiri atas First stage boot loader, hardware bitstream, dan u-boot. File BOOT.bin dapat dihasilkan menggunakan xilinx SDK (Xilinx Tools -> create boot image). Urutan dalam penempatan ketiga file di atas sangatlah penting (apabila terbalik maka sistem akan gagal boot). Urutan yang benar untuk ketiga file tersebut adalah sbb:
Note : zynq_fsbl.elf secara otomatis akan digenerate oleh SDK berdasar file xml HW yang kita import dari desain hardware vivado, sementara file system.bit dapat secara langsung didapatkan dari keluaran vivado.
2. U-boot
U-boot.elf merupakan second stage boot loader yang berfungsi untuk meload ke dalam RAM dan mengeksekusi Linux kernel (image). Untuk membikin u-boot maka kita perlu mendownload dan mengkompilenya dari digilent git repository
$ git clone git://github.com/Xilinx/u-boot-xlnx.git
Universal bootloader (u-boot) dapat meload kernel image baik dari SD card, QSPI flash, Ethernet (TFTP). Untuk mengkompile u-boot maka perlu diperhatikan beberapa hal seperti, Linux environment variable CROSS_COMPILE perlu diset menjadi arm-xilinx-linux-gnuebi-, ARCH environment diset ke arm. Kemudian dapat dicompile dengan perintah
$ cd u-boot-xlnx
$ export ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
$ make zynq_zed_config
$ make -j4 # -j4 berarti menggunakan processor dual core, gunakan -j8 bila anda memiliki quadcore
Proses diatas akan menghasilkan file u-boot.bin
NOTE:
Apabila diperlukan, install package di bawah ini
$ sudo apt-get install libssl-dev
$ sudo apt-get install device-tree-compiler
3. Linux Kernel
untuk menghasilkan image linux kernel maka kita perlu juga untuk mendownload dan mengkompile sesuai dengan arsitektur zynq 7000 ini.
$ git clone git://github.com/Xilinx/linux-xlnx.git
untuk mengkompile linux kernel pada folder diatas maka perlu masuk ke dalam direkrori git diatas
$ cd linux-xlnx
kemudian kita perlu mengkonfigurasi dengan perintah di bawah ini
$ export ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
$ make xilinx_zynq_defconfig
$ make -j4 # -j4 berarti menggunakan processor dual core, gunakan -j8 bila anda memiliki quadcore
NOTE:
Apabila diperlukan, install cross compiling di bawah ini
$ sudo apt-get install gcc-arm-linux-gnueabi make git-core ncurses-dev
Perintah diatas akan menghasilkan zImage pada direktori linux-xlnx/arch/arm/boot, untuk menghasilkan uImage maka dapat dilanjutkan dengan menggunakan perintah di bawah ini
$ make uImage LOADADDR=0x8000 -j4
Akan muncul file uImage pada folder tersebut.
Beberapa tipe linux kernel:
- Generic linux file kernel disebut sebagai image
- zImage adalah linux kernel image yang memiliki kemampuan self-extracting
- uImage adalah linux kernel image yang di wrapping dengan U-Boot header dengan menggunakan tool mkimage.
4. Device Tree
Agar dapat berjalan maka linux kernel harus mengetahui informasi dari setiap hardware yang ada. Pada linux kernel informasi mengenai hardware yang berjalan harus ditambahkan pada struktur data yang disebut sebagai device tree blob (dtb), sehingga apabila kita akan memodifikasi arsitektur pada zedboard ini maka kita perlu juga untuk memodifikasi dtb tersebut. Device tree blob ini dapat dihasilkan dengan cara mengkompile file dts yang berada di dalam folder xilinx device tree a download / clone dari repositorynya dengan menggunakan device tree compiler (dtc).
Pada direktori linux kernel di atas, kita dapat menemukan contoh contoh file dts pada
linux-xlnx/arch/arm/boot/dts
Apabila proses kompile linux kernel di atas berhasil maka akan muncul file file dtb pada folder tersebut.
Dibawah ini adalah contoh file dts.
/dts-v1/;
/ {
model = "MPC8313ERDB";
compatible = "MPC8313ERDB", "MPC831xRDB", "MPC83xxRDB";
#address-cells = <1>;
#size-cells = <1>;
aliases {
ethernet0 = &enet0;
serial0 = &serial0;
serial1 = &serial1;
pci0 = &pci0;
};
5. Ramdisk.image.gz
Ramdisk.image.gz dapat dihasilkan dengan menggunakan kombinasi buildroot, busybox dan uClibc. ramdisk atau bisa juga disebut Initial ramdisk (initrd) berfungsi sebagai root file system yang digunakan untuk meload device driver pada proses boot. Linux kernel akan memount root file system untuk menginisialisasi dan mengkonfigurasi proses startup system. Pada zedboard initrd image akan di load dan dimount di lokasi memory pada alamat 0x800000 dengan ukuran 8 MB.
Kita dapat memodifikasi isi ramdisk8M,image.gz demo diatas semisal untuk menambahkan / mengedit script dengan cara seperti di bawah ini (note: disini saya mengunakan ubuntu 16.04)
- gunzip ramdisk8M.image.gz
- chmod u+rwx ramdisk8M.image
- mkdir tmp_mnt/
- sudo mount -o loop ramdisk8M.image tmp_mnt/
- cd tmp_mnt/
Akan muncul ramdisk dan silakan melakukan modifikasi pada script yang ada (/usr/bin)
Untuk mengakhiri dan mengembalikan ke image semula maka lakukan perintah di bawah ini
- sudo umount tmp_mnt/
- gzip ramdisk.image