Uboot는 예전의 ppcboot 와 armboot가 합쳐지면서 생겨진 이름으로Univeral Boot Loader의 약자의 이름이다.
내 기억으로는 1.0 이전은 ppcboot로 소스관리가 되다가 ARM7이 나오면서 armboot가 별도나오고 이를 통합하여 생겨난 bootloard이다.
이 bootloard 이외에도 redboot 나 다른 opensource의 boot loarder들이 존재하며, 오래전에는 다 사용을 했지만,
이 bootloader가 Linux에서 많이 사용되어지면서 다른 bootloader들은 지금 찾기가 힘들것 같다.
빌드 방법과 기본구조만 알면 거의 이해가 될 것 같으며, Chip Vendor로 부터 BSP로 받더라도 DDR과 PLL부분은 자신에 맞게 수정을 해야 할 것이며,
본인에게 필요한 Command가 있다면 추가해서 사용하면된다.
U-Boot Site
http://www.denx.de/wiki/view/U-Boot
1.1 Download on Web
denx 사이트에서 직접 Web browser로 FTP로 연결이 되어 Download가 가능하다.
가장 편하며 좋다.
Download
ftp://ftp.denx.de/pub/u-boot/
1.2 DownLoad by FTP
$ ftp ftp.denx.de Connected to phoibe.denx.de. 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------- 220-You are user number 2 of 50 allowed. 220-Local time is now 09:10. Server port: 21. 220-IPv6 connections are also welcome on this server. 220 You will be disconnected after 15 minutes of inactivity. Name (ftp.denx.de:jhlee): anonymous ftp>dir drwxr-sr-x 6 1001 1000 4096 Jun 9 2015 pub ftp> cd pub ftp> dir drwxr-sr-x 17 1001 1000 4096 Jun 9 2015 eldk drwxr-xr-x 2 1001 1000 4096 Jan 10 2003 ppcboot drwxr-xr-x 2 1001 1000 4096 Jul 4 08:11 tmp drwxrwxr-x 2 1001 1000 12288 Dec 6 01:05 u-boot ftp > get u-boot-latest.tar.bz2 ftp > get u-boot-2015.10.tar.bz2
1.3 Download by GIT
$ apt-get install git // git가 설치 안된 경우 $ git clone git://git.denx.de/u-boot.git // GIT를 이용하여 압축이 안된 소스를 Download
1.4 Chip Vendor U-Boot
해당 SDK를 설치를 하면 U-Boot가 source가 존재 할 것이다.
2. Uboot의 기본구조 및 관련 기본설명
- ARCH
Board는 현재 각 개별 Board 별 설정을 하는 곳으로 현재 EVM이 많이 생겨나다보니 Kernel의 설정과 거의 유사한 형태로 변화되어 설정되고 있다.
- Drivers
이는 loader로써의 역할뿐만 아니라 간단한 TEST program으로 가능하게되었다.
아래에서 보면 mmc뿐만 아니라, fpga를 사용한다면, fpga loader도 필요할 것이며, bus interface인 pci , usb ,
network interface 인 mii 여러가지를 다양하게 지원하며, video를 사용하여 간단한 video도 test도 가능하다.
(예전에 video쪽은 Uboot에서 본인 Chip에 맞게 Driver를 다 구현하였다.)
- Filesystem
점점 기능이 추가되므로, 가능하다면 최신버전으로 사용하자
- NAND BOOT
이는 본인의 Chip에 따라 달라질수 있으며, 관련내용은 Chip Vender의 Manual을 참조하자
일단 예를 들어 TI인 경우 Davinci를 간단히 보면, RBL(Rom bootloader), UBL, U-BOOT 이런식으로 Boot가 진행된다.
RBL은 CPU가 내장을 하고 있으며, UBL은 NAND의 1st Block에서 찾아 이를 Boot 한 후,
U-BOOT를 Booting 시킨다.
그래서 2번째 Bootloader가 되는 것이며, OMAP인 경우는 이름이 바뀌지만, 개념은 거의 유사하다고 보면된다.
위 개념은 TI 뿐만 아니라, Freescale의 I.MX 다른 CPU에도 존재하기에 반드시 관련문서를보자.
- Bootscript 지원 및 환경변수 지원
- Device Tree
Kernel에게 전달 해주면, Kernel은 Device Tree 정보를 기반으로 Kernel HW 설정을 진행하며, Uboot에게 전달 해주면, Uboot역시 동일하게 동작한다.
$ tree -d -L 2 . ├── Licenses ├── api ├── arch │ ├── arc │ ├── arm │ ├── avr32 │ ├── blackfin │ ├── m68k │ ├── microblaze │ ├── mips │ ├── nds32 │ ├── nios2 │ ├── openrisc │ ├── powerpc │ ├── sandbox │ ├── sh │ ├── sparc │ └── x86 ├── board │ ├── 8dtech │ ├── AndesTech .... │ ├── LaCie │ ├── Marvell │ ├── Seagate .... .... .... │ ├── d-link │ ├── dave │ ├── davedenx │ ├── davinci │ ├── dbau1x00 │ ├── denx │ ├── dnp5370 │ ├── efi .... │ ├── h2200 │ ├── highbank │ ├── hisilicon ... │ ├── lge ... │ ├── nvidia ... │ ├── raspberrypi │ ├── renesas │ ├── ronetix │ ├── samsung │ ├── spear │ ├── st .. │ ├── ti ... │ └── xilinx ├── common │ └── spl ├── configs ├── disk ├── doc │ ├── DocBook │ ├── SPI │ ├── SPL │ ├── device-tree-bindings │ ├── driver-model │ └── uImage.FIT ├── drivers │ ├── bios_emulator │ ├── block │ ├── bootcount │ ├── clk │ ├── core │ ├── cpu │ ├── crypto │ ├── ddr │ ├── demo │ ├── dfu │ ├── dma │ ├── fpga │ ├── gpio │ ├── hwmon │ ├── i2c │ ├── input │ ├── led │ ├── memory │ ├── misc │ ├── mmc │ ├── mtd │ ├── net │ ├── pci │ ├── pcmcia │ ├── pinctrl │ ├── power │ ├── pwm │ ├── qe │ ├── ram │ ├── rtc │ ├── serial │ ├── soc │ ├── sound │ ├── spi │ ├── thermal │ ├── tpm │ ├── twserial │ ├── usb │ ├── video │ └── watchdog ├── dts ├── examples │ ├── api │ └── standalone ├── fs │ ├── cbfs │ ├── cramfs │ ├── ext4 │ ├── fat │ ├── jffs2 │ ├── reiserfs │ ├── sandbox │ ├── ubifs │ ├── yaffs2 │ └── zfs ├── include │ ├── andestech │ ├── asm-generic │ ├── bedbug │ ├── configs // Board Config │ ├── cramfs │ ├── dm │ ├── dt-bindings //Device Tree │ ├── faraday │ ├── fsl-mc │ ├── jffs2 │ ├── linux │ ├── lzma │ ├── mtd │ ├── net │ ├── pcmcia │ ├── power │ ├── samsung │ ├── synopsys │ ├── test │ ├── u-boot │ ├── usb │ └── zfs ├── lib │ ├── bzip2 │ ├── dhry │ ├── efi │ ├── libfdt //Flatted Device Tree 관련부분 │ ├── lzma │ ├── lzo │ ├── rsa │ ├── tizen │ └── zlib ├── net ├── post │ ├── board │ ├── cpu │ ├── drivers │ └── lib_powerpc ├── scripts │ ├── basic │ └── kconfig ├── test │ ├── dfu │ ├── dm │ ├── env │ ├── fs │ ├── image │ ├── stdint │ ├── trace │ ├── ums │ └── vboot └── tools ├── buildman ├── easylogo ├── env ├── gdb ├── kermit ├── logos ├── omap ├── palmtreo680 ├── patman └── scripts