forked from M-Labs/artiq
firmware: use libbuild_misoc in libdrtioaux. NFC.
This commit is contained in:
parent
8f33061a6d
commit
1b9b560242
32
artiq/firmware/Cargo.lock
generated
32
artiq/firmware/Cargo.lock
generated
@ -42,6 +42,16 @@ dependencies = [
|
||||
"log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bootloader"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"board 0.0.0",
|
||||
"build_artiq 0.0.0",
|
||||
"crc 1.6.0 (git+git://github.com/whitequark/crc-rs?rev=51cd356)",
|
||||
"rlibc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "build_artiq"
|
||||
version = "0.0.0"
|
||||
@ -49,6 +59,11 @@ dependencies = [
|
||||
"walkdir 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "build_const"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "build_misoc"
|
||||
version = "0.0.0"
|
||||
@ -77,6 +92,14 @@ name = "compiler_builtins"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/m-labs/compiler-builtins?rev=97916b1#97916b17ca542eac0524b8570c7d05913891a0dc"
|
||||
|
||||
[[package]]
|
||||
name = "crc"
|
||||
version = "1.6.0"
|
||||
source = "git+git://github.com/whitequark/crc-rs?rev=51cd356#51cd3560aa9d3823061f2bb46797d8c61f4cfa9e"
|
||||
dependencies = [
|
||||
"build_const 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cslice"
|
||||
version = "0.3.0"
|
||||
@ -87,6 +110,7 @@ name = "drtioaux"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"board 0.0.0",
|
||||
"build_misoc 0.0.0",
|
||||
"byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"std_artiq 0.0.0",
|
||||
@ -174,6 +198,11 @@ dependencies = [
|
||||
"std_artiq 0.0.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rlibc"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "runtime"
|
||||
version = "0.0.0"
|
||||
@ -261,10 +290,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[metadata]
|
||||
"checksum bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c30d3802dfb7281680d6285f2ccdaa8c2d8fee41f93805dba5c4cf50dc23cf"
|
||||
"checksum build_const 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e90dc84f5e62d2ebe7676b83c22d33b6db8bd27340fb6ffbff0a364efa0cb9c9"
|
||||
"checksum byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "652805b7e73fada9d85e9a6682a4abd490cb52d96aeecc12e33a0de34dfd0d23"
|
||||
"checksum cc 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a9b13a57efd6b30ecd6598ebdb302cca617930b5470647570468a65d12ef9719"
|
||||
"checksum compiler_builtins 0.1.0 (git+https://github.com/m-labs/compiler-builtins?rev=97916b1)" = "<none>"
|
||||
"checksum compiler_builtins 0.1.0 (git+https://github.com/rust-lang-nursery/compiler-builtins?rev=631b568)" = "<none>"
|
||||
"checksum crc 1.6.0 (git+git://github.com/whitequark/crc-rs?rev=51cd356)" = "<none>"
|
||||
"checksum cslice 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0f8cb7306107e4b10e64994de6d3274bd08996a7c1322a27b86482392f96be0a"
|
||||
"checksum fringe 1.1.0 (git+https://github.com/m-labs/libfringe?rev=bd23494)" = "<none>"
|
||||
"checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb"
|
||||
@ -273,6 +304,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
"checksum log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "880f77541efa6e5cc74e76910c9884d9859683118839d6a1dc3b11e63512565b"
|
||||
"checksum log_buffer 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ec57723b84bbe7bdf76aa93169c9b59e67473317c6de3a83cb2a0f8ccb2aa493"
|
||||
"checksum managed 0.4.0 (git+https://github.com/m-labs/rust-managed.git?rev=629a6786a1cf1692015f464ed16c04eafa5cb8d1)" = "<none>"
|
||||
"checksum rlibc 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc874b127765f014d792f16763a81245ab80500e2ad921ed4ee9e82481ee08fe"
|
||||
"checksum rustc-cfg 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "56a596b5718bf5e059d59a30af12f7f462a152de147aa462b70892849ee18704"
|
||||
"checksum same-file 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d931a44fdaa43b8637009e7632a02adc4f2b2e0733c08caa4cf00e8da4a117a7"
|
||||
"checksum smoltcp 0.4.0 (git+https://github.com/m-labs/smoltcp?rev=507d2fe)" = "<none>"
|
||||
|
@ -1,2 +1,2 @@
|
||||
[workspace]
|
||||
members = ["runtime", "ksupport", "satman"]
|
||||
members = ["bootloader", "runtime", "ksupport", "satman"]
|
||||
|
18
artiq/firmware/bootloader/Cargo.toml
Normal file
18
artiq/firmware/bootloader/Cargo.toml
Normal file
@ -0,0 +1,18 @@
|
||||
[package]
|
||||
authors = ["M-Labs"]
|
||||
name = "bootloader"
|
||||
version = "0.0.0"
|
||||
build = "build.rs"
|
||||
|
||||
[lib]
|
||||
name = "bootloader"
|
||||
crate-type = ["staticlib"]
|
||||
path = "main.rs"
|
||||
|
||||
[build-dependencies]
|
||||
build_artiq = { path = "../libbuild_artiq" }
|
||||
|
||||
[dependencies]
|
||||
rlibc = "1.0"
|
||||
crc = { git = "git://github.com/whitequark/crc-rs", rev = "51cd356", default-features = false }
|
||||
board = { path = "../libboard", features = ["uart_console"] }
|
18
artiq/firmware/bootloader/Makefile
Normal file
18
artiq/firmware/bootloader/Makefile
Normal file
@ -0,0 +1,18 @@
|
||||
include ../include/generated/variables.mak
|
||||
include $(MISOC_DIRECTORY)/software/common.mak
|
||||
|
||||
RUSTFLAGS += -Cpanic=abort
|
||||
|
||||
all:: bootloader.bin
|
||||
|
||||
.PHONY: $(RUSTOUT)/libbootloader.a
|
||||
$(RUSTOUT)/libbootloader.a:
|
||||
$(cargo) --manifest-path $(BOOTLOADER_DIRECTORY)/Cargo.toml -- \
|
||||
-Clto
|
||||
|
||||
bootloader.elf: $(RUSTOUT)/libbootloader.a
|
||||
$(link) -T $(BOOTLOADER_DIRECTORY)/bootloader.ld
|
||||
|
||||
%.bin: %.elf
|
||||
$(objcopy) -O binary
|
||||
$(MSCIMG) $@
|
46
artiq/firmware/bootloader/bootloader.ld
Normal file
46
artiq/firmware/bootloader/bootloader.ld
Normal file
@ -0,0 +1,46 @@
|
||||
INCLUDE generated/output_format.ld
|
||||
INCLUDE generated/regions.ld
|
||||
ENTRY(_reset_handler)
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.vectors :
|
||||
{
|
||||
_begin = .;
|
||||
*(.vectors)
|
||||
} > rom
|
||||
|
||||
.text :
|
||||
{
|
||||
*(.text .text.*)
|
||||
} > rom
|
||||
|
||||
.rodata :
|
||||
{
|
||||
*(.rodata.*)
|
||||
. = ALIGN(4);
|
||||
_end = .;
|
||||
} > rom
|
||||
|
||||
.crc ALIGN(4) :
|
||||
{
|
||||
_crc = .;
|
||||
. += 4;
|
||||
}
|
||||
|
||||
.bss ALIGN(4) :
|
||||
{
|
||||
_fbss = .;
|
||||
*(.bss .bss.*)
|
||||
. = ALIGN(4);
|
||||
_ebss = .;
|
||||
} > sram
|
||||
|
||||
.stack :
|
||||
{
|
||||
/* Ensure we have a certain amount of space available for stack. */
|
||||
. = ORIGIN(sram) + LENGTH(sram) - 0x800;
|
||||
. = ORIGIN(sram) + LENGTH(sram) - 4;
|
||||
_fstack = .;
|
||||
} > sram
|
||||
}
|
6
artiq/firmware/bootloader/build.rs
Normal file
6
artiq/firmware/bootloader/build.rs
Normal file
@ -0,0 +1,6 @@
|
||||
extern crate build_artiq;
|
||||
|
||||
fn main() {
|
||||
build_artiq::misoc_cfg();
|
||||
build_artiq::git_describe();
|
||||
}
|
73
artiq/firmware/bootloader/main.rs
Normal file
73
artiq/firmware/bootloader/main.rs
Normal file
@ -0,0 +1,73 @@
|
||||
#![no_std]
|
||||
#![feature(lang_items)]
|
||||
|
||||
extern crate rlibc;
|
||||
extern crate crc;
|
||||
#[macro_use]
|
||||
extern crate board;
|
||||
|
||||
use core::slice;
|
||||
|
||||
fn check_integrity() -> bool {
|
||||
extern {
|
||||
static _begin: u8;
|
||||
static _end: u8;
|
||||
static _crc: u32;
|
||||
}
|
||||
|
||||
unsafe {
|
||||
let length = &_end as *const u8 as usize -
|
||||
&_begin as *const u8 as usize;
|
||||
let bios = slice::from_raw_parts(&_begin as *const u8, length);
|
||||
crc::crc32::checksum_ieee(bios) == _crc
|
||||
}
|
||||
}
|
||||
|
||||
fn initialize_sdram() -> bool {
|
||||
unsafe {
|
||||
board::sdram_phy::initialize();
|
||||
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern fn main() -> i32 {
|
||||
println!("");
|
||||
println!(r" _ ____ _____ ___ ___ ");
|
||||
println!(r" / \ | _ \_ _|_ _/ _ \ ");
|
||||
println!(r" / _ \ | |_) || | | | | | |");
|
||||
println!(r" / ___ \| _ < | | | | |_| |");
|
||||
println!(r"/_/ \_\_| \_\|_| |___\__\_\");
|
||||
println!("");
|
||||
println!("ARTIQ Bootloader");
|
||||
println!("Copyright (c) 2017 M-Labs Limited");
|
||||
println!("Version {}", include_str!(concat!(env!("OUT_DIR"), "/git-describe")));
|
||||
println!("");
|
||||
|
||||
if !check_integrity() {
|
||||
panic!("Bootloader CRC failed");
|
||||
} else {
|
||||
println!("Bootloader CRC passed");
|
||||
}
|
||||
|
||||
if !initialize_sdram() {
|
||||
panic!("SDRAM initialization failed")
|
||||
} else {
|
||||
println!("SDRAM initialized");
|
||||
}
|
||||
|
||||
loop {}
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern fn exception(vect: u32, _regs: *const u32, pc: u32, ea: u32) {
|
||||
panic!("exception {} at PC {:#08x}, EA {:#08x}", vect, pc, ea)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
#[lang = "panic_fmt"]
|
||||
pub extern fn panic_fmt(args: core::fmt::Arguments, file: &'static str, line: u32) -> ! {
|
||||
println!("panic at {}:{}: {}", file, line, args);
|
||||
loop {}
|
||||
}
|
@ -8,6 +8,9 @@ build = "build.rs"
|
||||
name = "drtioaux"
|
||||
path = "lib.rs"
|
||||
|
||||
[build-dependencies]
|
||||
build_misoc = { path = "../libbuild_misoc" }
|
||||
|
||||
[dependencies]
|
||||
log = { version = "0.3", default-features = false }
|
||||
std_artiq = { path = "../libstd_artiq", features = ["alloc"] }
|
||||
|
@ -1,15 +1,5 @@
|
||||
use std::env;
|
||||
use std::path::Path;
|
||||
use std::io::{BufRead, BufReader};
|
||||
use std::fs::File;
|
||||
extern crate build_misoc;
|
||||
|
||||
fn main() {
|
||||
let out_dir = env::var("BUILDINC_DIRECTORY").unwrap();
|
||||
let cfg_path = Path::new(&out_dir).join("generated").join("rust-cfg");
|
||||
println!("cargo:rerun-if-changed={}", cfg_path.to_str().unwrap());
|
||||
|
||||
let f = BufReader::new(File::open(&cfg_path).unwrap());
|
||||
for line in f.lines() {
|
||||
println!("cargo:rustc-cfg={}", line.unwrap());
|
||||
}
|
||||
build_misoc::cfg();
|
||||
}
|
||||
|
@ -48,6 +48,7 @@ def build_artiq_soc(soc, argdict):
|
||||
builder = Builder(soc, **argdict)
|
||||
builder.add_software_package("libm")
|
||||
builder.add_software_package("libunwind")
|
||||
builder.add_software_package("bootloader", os.path.join(artiq_dir, "firmware", "bootloader"))
|
||||
builder.add_software_package("ksupport", os.path.join(artiq_dir, "firmware", "ksupport"))
|
||||
builder.add_software_package("runtime", os.path.join(artiq_dir, "firmware", "runtime"))
|
||||
try:
|
||||
|
Loading…
Reference in New Issue
Block a user