- Board bring-up
- How to make it easier.
- FreeBSD with no / minimal device footprint
- Disk images
- Power management
- Cache footprint
- Evaluation board support
- Emulator support
- Tinderboxes running emulators
- gdb stubs are broken
Viking OS (talk)
Viking is an OS from BrilliantService using FreeBSD 10 + GNUstep for augmented realities. 10 chosen because of better integration with Objective-C (clang, libc++ and so on).
FreeBSD issues: Linux blob driver for USB Time-of-Flight (ToF) camera. Initially prototyped with Linux. Now using Linux blob via FreeBSD-libusb2 compiled for Linux ABI but FreeBSD kernel interfaces. Camera app runs as separate Linux app, communicates with FreeBSD-native code via pipe.
Can we make this easier?
- Build Linux libusb on FreeBSD (was built on Linux)
- Provide linux-libusb in ports?
Current issues include no driver for MacBook Air SSD.
Early printf() will make life much easier (really means early putc()) and early panic(). Useful output makes debugging easier. Something on GPIO.
People need to hit Adrian until he's documented uart.
Andy is giving a talk at EuroBSDCon, should coordinate with docs people to turn it into handbook material.
Brooks is going to write 'how MIPS boots' tutorial. Our MIPS is simpler than NetBSD because they support weird stuff. Nop nop nop!
FDT needs more documentation. Some MIPS platforms still use device.hints, some migration mechanisms might be needed, possibly import hints into FDT? Probably nontrivial (very different semantics), so probably on the 'patches welcome' list...
Document how different boards encode information (e.g. MAC addresses) so the early boot process can get all of these things.
For Warren's x86 model, you need a kernel with minimal dependencies. Ideally, just UART + APIC. Xen PV kernel is only 3.5MB.
Network stack should be optional for some things. UFS / FFS are (big) compiled in things that could be optional for things that only want memory filesystems, or use ISO9660 (small) in ROM.
How do we drive a project to build an absolutely minimal kernel? It's important that run-time overheads are not introduced when we make things optional.
All of the subsystems are big and there's no deduplication. Lots (?) of copy and pasted code. Can we have tools that will find copied code?
What should the minimal feature set be? CAM is large, most of it (e.g. tape, ATA support) not needed in embedded platforms. Are there some POSIX APIs that are not required?
Run-time code reachability checking. Can we work out what stuff is not reachable for a given hardware configuration. Can KObj make static reachability analysis tractable? Can we make REMS investigate this?
Image Creation and Upgrading
Building makefs images + third-party stuff. Crochet? Package building for ARM / MIPS. Can we do freebsd-update for ARM? MIPS / ARM packages should be coming Real Soon Now™. For very small embedded stuff, we have different problems - e.g. platforms with 4MB of flash to boot from.
Raspberry Pi should be released as image + packages with 10.1 (developer preview / beta for 10.0). This needs:
- Xorg (3D!)
- Networking / SD cards (work already, needs DMA to not be slow)
- USB is not so portable (memory coherency issues).
- First-time configuration menu
FreeBSD-update is far too slow for RPi (lots of tiny files).
Do we need a separate re@ (or subset) for embedded? RPi re? Adrian volunteered for a lot of things.
Why doesn't FreeBSD-update grab one big tarball and then use libarchive to extract the files? You can run out of inodes from all of the small files it creates. Running FreeBSD-update on a VM can take longer than buildworld + installworld. For SD cards it will be painful...
We think it's a good idea. calloutng will let you batch wake-ups, needs things to use it...
CPU balloon driver? We need to be able to turn off unused CPUs. Newer big.LITTLE allows arbitrary mixing of cores, older ones require you to pick all of the A15s or all of the A7s. Turning off unused cores is a big power win. Clock control on CPUs, needs to be in the kernel, using input from the scheduler. Changing the clock needs devices to be aware of the fact that the clock speed is not constant, clock tree and power trees are needed.
Can we change interrupt delivery at run time? We want to be able to say 'all interrupts go to core 0' and then put cores 1-n into a deep sleep state and send them a wakeup IPI when you need to schedule some userspace stuff on them. This requires talking to JohnBaldwin. Lots of research on power management algorithms, but mechanism needs to exist before policy can be tuned. NUMA issues if you power down a socket and need to access its RAM - need to be able to move memory (duplication and deduplication). Hot-plug memory is also useful - kernel structures can't be moved in physical RAM.
Generic infrastructure for putting drivers in low-power state. e.g. turn off NICs when there's no listening sockets, power down block devices, and so on.
Did Intel port PowerTOP? If not, can the Foundation ask them to please?
Evaluation Boards and Tinderboxes
Multicore ARM is still broken, apparently not for SemiHalf. This needs fixing.