Seni perdukunan atau firmware khusus untuk Olinuxino. UBOOT Bagian 2

Semua ini dikumpulkan dari bawah Ubuntu 16.04.

Keputusan untuk membangun firmware lahir karena kurangnya akses gratis ke gambar untuk board ini (Olimex A13-Olinuxino). Dan pabrikan menawarkan untuk membeli kartu SD dengan gambar dan harganya sekitar 10 euro saat itu, yang tidak benar-benar berfungsi, dan selain itu, dirancang untuk monitor.

Kami akan mengonfigurasi konfigurasi bootloader untuk boot dari kartu SD. Karena tidak ada memori NAND di papan tulis, dan semua opsi boot lain sedikit bengkok (siapa pun yang dapat memasang uboot untuk boot dari media USB, biarkan dia mengambil dua langkah maju dan berbagi). Algoritma pemuatan prosesor allwinner a13 dapat ditemukan di situs web pabrikan. Atau di sini adalah kliping dari lembar data.



Terlihat jelas dari algoritma bahwa bootloader diperiksa pada kartu SD terlebih dahulu, kemudian sisanya diperiksa, dan hanya pada akhirnya bootloader diperiksa untuk USB. Oleh karena itu, tablet dan smartphone dapat dilakukan dengan Ubuntu jika mereka menyelipkan kartu SD dengan cara yang sesuai. Dan ternyata, kira-kira algoritma semacam itu akan, jika tidak untuk semua, maka untuk banyak produsen prosesor lengan.

Pertama, Anda perlu memecahkan kartu SD, untuk ini, agar tidak membuat kesalahan dalam proses mengetik perintah, kami akan mengurangi seluruh proses menjadi file skrip (saya lebih suka mengurangi semuanya menjadi file seperti itu, karena Anda harus menjalankannya lebih dari sekali).

#!/bin/sh DEViCELINK=/dev/sdb fdisk $DEViCELINK <<EOF n #    p #   1 #   2048 #     2MiB +64M #  ,    kernel     dts  n p 2 +2G #    ubuntu n p 3 +2G #         n p 4 #         w EOF mkfs.ext2 /dev/sdb1 << EOF #   kernel    fat16  ext2 y EOF mkfs.ext4 /dev/sdb2 << EOF y EOF mkfs.ext4 /dev/sdb3 << EOF y EOF mkfs.ext4 /dev/sdb4 << EOF y EOF 

UBOOT Build


Mari kita membahas bootloader dengan lebih detail, dan saat ini kita memilih UBOOT, kita memompa versi u-boot-2018.05, yang terakhir pada saat itu.

Diasumsikan bahwa semua perangkat lunak yang diperlukan untuk perakitan sudah diinstal. Dan mulai build dengan mengkonfigurasi bootloader.

Untuk memulai konfigurasi, Anda harus pergi ke folder dengan UBOOT dan dari sana jalankan perintah:

 make O=../olimex-uboot #       -j4 #     ARCH=arm #      CROSS_COMPILE=arm-linux-gnueabihf- #    xconfig #   GUI  

Sebagai hasil dari eksekusi, kami mendapatkan jendela seperti itu.



Ini adalah apa yang disebut versi X dari konfigurator, mereka biasanya menggunakan opsi konsol, lebih banyak informasi disediakan di dalamnya, tetapi ini lebih visual dan benar-benar akan memenuhi kebutuhan kita.

Dan kemudian, jika Anda memiliki banyak waktu atau Anda tidak keberatan, Anda dapat mengkonfigurasi bootloader sendiri dari awal. Namun, lebih baik untuk mengunduh konfigurasi selesai papan ini melalui menu file. Dalam folder dengan sumber bootloader di /u-boot-2018.05/configs/, pilih file A13-OlinuXino_defconfig ini adalah konfigurasi kami, di mana semuanya sudah diinstal. Selanjutnya, klik simpan dan tutup jendela, karena tidak ada yang perlu diubah di sini.

Tetap menjalankan perintah build:

 make O=../olimex-uboot -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 

Dalam perintah ini, elemen-elemennya sama dengan yang sebelumnya, hanya tanpa parameter xconfig, yang merupakan arti konfigurasi. Itu saja, bootloader sudah terpasang.

Setelah perakitan selesai, dalam folder yang ditentukan dalam perintah, kita perlu menemukan file ini "u-boot-sunxi-with-spl.bin" ini adalah bootloader yang diinginkan.

Selanjutnya, untuk mengunggah bootloader ke kartu SD, gunakan perintah:

 dd if=../olimex-uboot/u-boot-sunxi-with-spl.bin #      of=/dev/sdb #     SD  bs=1024 seek=8 #  8KiB  ,      

Bootloader yang baru direkam setelah boot akan menunjuk ke bagian selanjutnya dari kartu SD / dev / sdb1, dan di sana ia akan mencari file skrip dengan variabel lingkungan yang berisi instruksi untuk memuat lebih lanjut.

File ini harus dinamai boot.scr, file dengan nama ini mencari uboot setelah diunduh. Tentu saja, nama file dapat diubah serta metode pengunduhan jika Anda masuk ke konfigurasi UBOOT, tetapi marilah kita memikirkan opsi ini.

Anda juga harus mengkompilasi file devicetree untuk satu hal, mereka ada di sumber dengan bootloader di /u-boot-2018.05/arch/arm/dts/ kami tertarik pada file sun5i-a13-olinuxino.dts. Ini mewakili konfigurasi register dan periferal prosesor. Ini adalah file konfigurasi universal, jadi opsi ini dimungkinkan ketika satu bootloader uboot digunakan untuk prosesor yang berbeda, tetapi file dts yang berbeda digunakan. File dts yang sama ada dalam kode sumber kernel Linux, mereka pada dasarnya sama, mereka hanya ditulis sedikit berbeda, dan Anda dapat memilih dari mana mendapatkan pohon perangkat rakitan. Secara umum, untuk membuat file dts, Anda perlu menjalankan perintah ini:

 make O=../olimex-uboot -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs #      dts  

File yang dikompilasi akan berada di ../olimex-uboot/arch/arm/dts/.
Pertimbangkan untuk mendapatkan file boot.scr lebih terinci.
Pertama, buat file boot.cmd dengan konten:

 load mmc 0 0x43000000 sun5i-a13-olinuxino.dtb load mmc 0 0x42000000 uImage setenv bootargs root=/dev/mmcblk0p2 rootfstype=ext4 rw rootwait console=ttyS0,115200 bootm 0x42000000 – 0x43000000 

Tetapi agar uboot dapat memahami instruksinya, file ini harus dalam bentuk skrip dan untuk ini Anda perlu menjalankan perintah:

  mkimage -C none -A arm -T script -d boot.cmd boot.scr 

Di mana boot.scr adalah file yang diperlukan.

Baris pertama memuat mmc 0 0x43000000 sun5i-a13-olinuxino.dtb memuat file tree perangkat pada alamat yang ditentukan dalam RAM. memuat mmc 0 menunjukkan bahwa Anda perlu mengunduh file dari bagian pertama kartu SD, sedangkan penomoran untuk uboot adalah nol dan bukan satu.

Baris kedua memuat mmc 0 0x42000000 uImage memuat kernel Linux yang telah dirakit pada alamat yang ditentukan.

Untuk versi kami, variabel mode video setenv, yang biasanya digunakan lebih lanjut, tidak diperlukan bagi kami karena monitor tidak direncanakan untuk digunakan.

Baris ketiga:

 setenv bootargs #    root=/dev/mmcblk0p2 #    SD    rootfs rootfstype=ext4 #    rootfs rw #    rootwait console=ttyS0,115200 #    uart0 

Perintah bootm terakhir memuat kernel dari memori yang dimuat sebelumnya.

Pada artikel selanjutnya, bagian terakhir yang harus ditempatkan pada bagian pertama kartu SD adalah pembentukan kernel kernel Linux.

Bagian pertama artikel
Bagian ketiga artikel

Source: https://habr.com/ru/post/id434942/


All Articles