
Oreboot는 Coreboot의 다운 스트림 포크입니다. 즉, Oreboot는 'C'가없는 Coreboot입니다.
Oreboot는 주로 Rust로 작성되며 필요한 경우 어셈블리가 있습니다.
Oreboot는 현재 Linuxboot 페이로드를 지원할 계획입니다.
oreboot ?
v 13
cpu_pll fa001000
cpu_axi 5000100
cpu_axi 5000100
peri0_ctrl was: f8216300
peri0_ctrl lock en
peri0_ctrl PLLs
peri0_ctrl set: f8216300
DDR3@792MHz
test OK
512M ?
NOR flash: c2/2018
load 00018000 bytes to 40000000: ➡️.
load 00fc0000 bytes to 44000000: ➡️➡️➡️➡️➡️➡️➡️➡️➡️➡️➡️➡️➡️➡️➡️➡️.
load 00010000 bytes to 41a00000: ➡️.
{ɕ serial uart0 initialized
RISC-V vendor 5b7 arch 0 imp 0
==== platform CSRs ====
MXSTATUS c0408000
MHCR 00000109
MCOR 00000002
MHINT 00004000
see C906 manual p581 ff
=======================
Set up extension CSRs
==== platform CSRs ====
MXSTATUS c0638000
MHCR 0000017f
MCOR 00000003
MHINT 0000610c
see C906 manual p581 ff
=======================
timer init
reset init
ipi init
RustSBI version 0.3.1
.______ __ __ _______.___________. _______..______ __
| _ | | | | / | | / || _ | |
| |_) | | | | | | (----`---| |----`| (----`| |_) || |
| / | | | | | | | _ < | |
| | ----.| `--' |.----) | | | .----) | | |_) || |
| _| `._____| ______/ |_______/ |__| |_______/ |______/ |__|
Platform Name: T-HEAD Xuantie Platform
Implementation: oreboot version 0.1.0
[rustsbi] misa: RV64ACDFIMSUVX
[rustsbi] mideleg: ssoftstimersext (0x222)
[rustsbi] medeleg: imaialmalasmasauecallipagelpagespage(0xb1f3)
[rustsbi] mie: msoft ssoft mtimer stimer mext sext (00000aaa)
PMP0 0x0 - 0x40000000 (A,R,W,X)
PMP1 0x40000000 - 0x40200000 (A,R)
PMP2 0x40200000 - 0x80000000 (A,R,W,X)
PMP3 0x80000000 - 0x80200000 (A,R)
PMP4 0x80200000 - 0xfffff800 (A,R,W,X)
PMP8 0x0 - 0x0 (A,R,W,X)
DTB looks fine, yay!
Decompress 12375521 bytes from 0x44000004 to 0x40200000, reserved 25165824 bytes
Success, decompressed 21910144 bytes :)
Payload looks like Linux Image, yay!
DTB still fine, yay!
Handing over to SBI, will continue at 0x40200000
enter supervisor at 40200000 with DTB from 41a00000
...
[ 0.000000] OF: fdt: Ignoring memory range 0x40000000 - 0x40200000
[ 0.000000] Machine model: Sipeed Lichee RV Dock
[ 0.000000] earlycon: sbi0 at I/O port 0x0 (options '')
[ 0.000000] printk: bootconsole [sbi0] enabled
[ 0.000000] Zone ranges:
[ 0.000000] DMA32 [mem 0x0000000040200000-0x000000005fffffff]
[ 0.000000] Normal empty
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000040200000-0x000000005fffffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000040200000-0x000000005fffffff]
[ 0.000000] riscv: SBI specification v1.0 detected
[ 0.000000] riscv: SBI implementation ID=0x4 Version=0x301
[ 0.000000] riscv: SBI TIME extension detected
[ 0.000000] riscv: SBI IPI extension detected
[ 0.000000] riscv: SBI SRST extension detected
[ 0.000000] riscv: base ISA extensions acdfim
[ 0.000000] riscv: ELF capabilities acdfim
[ 0.000000] percpu: Embedded 17 pages/cpu s31912 r8192 d29528 u69632
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 128520
[ 0.000000] Kernel command line: console=tty0 console=ttyS0,115200 loglevel=7 earlycon=sbi

우리는 Rust Embedded Working Group 모델의 추상화 위에 상자와 특성을 가진 책에 자세히 설명되어 있습니다.
간단히 말해서 : 
SOC 공급 업체는 코어, 주변 장치 및 기타 블록 및/또는 SVD 파일에 문서를 제공하여 PAC 및 HAL 상자를 생성 할 수 있도록 하십시오 .
Rust Embedded Book은 설계 패턴 및 구현 지침뿐만 아니라 구조를 이해하기위한 용어집을 제공합니다.
일반적인 Oreboot 및 Firmware가 일반적인 작동 방식에 대한 일반적인 이해를 얻으려면 부팅 흐름 문서를 살펴보십시오. 펌웨어가 저장되는 방법을 설명하고 플랫폼 / SOC에서 부츠를 부팅합니다.
Oreboot는 자체 운영 체제로 바꾸는 것을 목표로하지 않습니다. 따라서, 우리는 운전자의 양과 기능을 낮게 유지하려고합니다. 그러나 SOC의 설계를 통해 코드로드하기 위해 무언가를 구현해야합니다.
대부분의 경우 스토리지에서 읽기 만하면되며 풍부한 파일 시스템이 필요하지 않기 때문에 전체 드라이버가 필요하지 않습니다. OS의 요구 사항과 세부 사항과 충돌하지 않으려면 각각 펌웨어 및 운영 체제를 고정하는 스토리지 부품을 명확하게 분리하는 것이 좋습니다. 예를 들어, 펌웨어를 SPI 플래시에 넣고 NVME SSD에 OS를 넣으십시오.
이 저장소를 복제하고 디렉토리를 입력하십시오.
git clone https://github.com/oreboot/oreboot.git
cd oreboot일반적으로 다음 패키지가 설치해야합니다.
device-tree-compilerpkg-configlibsslrustup 데비안 기반 시스템의 경우 https://sh.rustup.rs에서 컬을 통해 rustup 끌어 당기는 대상이 있습니다.
make debiansysprepare그렇지 않으면 시스템 패키지 관리자를 통해 패키지를 설치하십시오.
OS에 관계없이 Oreboot 용 도구 체인을 설치해야합니다. 이 명령은 한 번만 수행하면되지만 반복적으로 수행하는 것이 안전합니다.
make firsttimeOreboot로 일하기 시작하거나 매일 :
cd oreboot
make update문제를보고하기 전에 반드시이 작업을 수행해야합니다.
프로젝트에는 두 가지 다른 것이 있습니다.
src/mainboards/* 실제 대상; 이들은 드라이버, Soc Init 코드 및 이와 유사한 상자에 의존하고 공유합니다. 메인 보드의 경우 Cargo.lock 추적 해야합니다 .src/* 다른 모든 것; 이것들은 앞서 언급 한 상자이며,이를 위해 Cargo.lock 파일을 추적하지 않습니다. 메인 보드의 Cargo.lock 확인하면 Lock 파일은 성공적인 빌드 시점에 종속성 상태를 기록하여 재현성을 가능하게합니다. 이상적으로는 잠금 파일이 하드웨어에서 성공적인 부팅을 업데이트합니다.
자세한 내용은 https://doc.rust-lang.org/cargo/faq.html#hy-binaries-ave-cargolock-in-version-control-not-libraries를 참조하십시오
새 메인 보드를 만들 때 동일한 아키텍처를 위해 다른 사람들이 어떻게 설정되는지 살펴 보는 것이 좋습니다. Oreboot가 Bare Metal을 타겟팅하고 있으므로 표준 라이브러리가 없습니다.
특정 플랫폼 용 Oreboot를 구축하려면 다음을 수행하십시오.
# Go to the mainboard's directory
cd src/mainboard/sunxi/nezha
# Build the mainboard target
make mainboard
# View disassembly
make objdump
# Run from RAM without flashing
make run
# Flash to the board
make flash
Root Makefile 사용하면 모든 플랫폼을 신속하게 구축 할 수 있습니다.
# build all mainboards
make mainboards
# build everything in parallel
make -j mainboards
# Install QEMU for your target platform, e.g. x86
sudo apt install qemu-system-x86
# Build release build and start with QEMU
cd src/mainboard/emulation/qemu-q35 && make run
# Quit qemu with CTRL-A X
RISC-V 소스에서 QEMU를 구축하려면 :
git clone https://github.com/qemu/qemu && cd qemu
mkdir build-riscv64 && cd build-riscv64
../configure --target-list=riscv64-softmmu
make -j$(nproc)
# QEMU binary is at riscv64-softmmu/qemu-system-riscv64
Aarch64의 소스에서 QEMU를 구축하려면 :
git clone https://github.com/qemu/qemu && cd qemu
mkdir build-aarch64 && cd build-aarch64
../configure --target-list=aarch64-softmmu
make -j$(nproc)
# QEMU binary is at aarch64-softmmu/qemu-system-aarch64
Coreboot와 마찬가지로 Oreboot의 구조는 공급 업체 및 메인 보드 당입니다. 여러 아키텍처와 SOC가 각각 지원되며 공통 코드는 이사회간에 공유됩니다. 사소한 편차가 너무 많은 코드 복제를 일으키는 경우 보드가 변형을 가질 수 있습니다.
qemu-riscv참고로, 이전 접근법이 문서화됩니다. X86 및 ARM 플랫폼 및 메인 보드를 살펴보십시오.
초기 에뮬레이션 목표는 src.broken/mainboard/emulation/ 에 주차되었습니다. 그들은 Oreboot가 지원하고자하는 각 아키텍처에 대한 일반적인 이해를 제공해야합니다.
qemu-armv7qemu-aarch64qemu-q35Makefile 은 간단해야합니다. 제어 흐름에 대신 xtask 사용하여 바이너리에 헤더 또는 체크섬을 추가, 이미지 등을 추가하십시오.src/mainboard/$VENDOR/$BOARD (SUB) 디렉토리의 Cargo.toml 보드 별 종속성을 허용하고 모든 단계를 병렬로 구축 할 수 있습니다.make format 으로 자동 형식화됩니다. CI 검사는 변경이 서식 규칙을 준수하지 않는지 알 수 있습니다.Oreboot의 저작권은 상당수의 개별 개발자와 회사가 소유하고 있습니다. 자세한 내용은 개별 소스 파일을 확인하십시오.
Oreboot는 GNU 일반 공개 라이센스 (GPL)의 조건에 따라 라이센스가 부여됩니다. 일부 파일은 "GPL (버전 2 또는 이후 버전)"에 따라 라이센스가 부여되며 일부 파일은 "GPL, 버전 2"에 따라 라이센스가 부여됩니다. 다른 프로젝트에서 파생 된 일부 부품의 경우 다른 (GPL 호환) 라이센스가 적용될 수 있습니다. 자세한 내용은 개별 소스 파일을 확인하십시오.
이로 인해 결과 광석 이미지는 GPL 버전 2에 따라 라이센스를 부여합니다.