From 485eb2e5813c55f87501fd6d12c733766c300ac2 Mon Sep 17 00:00:00 2001
From: Warren Block This is a draft of the January–March 2016
- status report. Please check back after it is finalized, and
- an announcement email is sent to the &os;-Announce mailing
- list.
The first quarter of 2016 was another productive quarter for - the &os; project and community. [...]
- -Thanks to all the reporters for the excellent work!
- -The deadline for submissions covering the period from April - to June 2016 is July 7, 2016.
- ?> - - -In February, Program Verification Systems used their - PVS-Studio tool to run a static analysis of the &os; kernel. - A Phabricator review was created to allow developers to share - comments on the results. A number of bugs ranging from - trivial typos to redundant code to important logic errors were - found and fixed. Some results were false positives. Several - of these were addressed by changing code that misled the - static analyzer and could also mislead a human reader.
- -The cooperation that Program Verification Systems offers to - open-source projects like &os; benefits everyone. We thank - them for sharing this analysis and their insights with us.
- -Federico Caminiti created an entirely new Spanish translation - of the 31,000-word - FAQ - with editorial help from Carlos J Puga Medina.
- -This landmark accomplishment marks the first use of the new - PO translation system to translate an entire book!
- -Ruey-Cherng Yu has begun an ambitious Chinese translation - (zh_TW) of the 64,000-word - Porter's Handbook. - About half of the strings in the book have been translated so - far.
- - -Help add and improve translations of &os; documents into - Spanish: - start of freebsd-translators thread.
-Help add and improve translations of &os; documents into - Chinese or other languages.
-A new option "-manage-gids" was added to the nfsuserd - daemon. This option tells the NFS server to use the list of - groups for a uid on the server and not the list of groups in - the NFS RPC request. Use of this option avoids the 16 group - limit for NFS RPCs using AUTH_SYS (the default).
- -Work is ongoing with respect to development of pNFS support - for the NFS server using GlusterFS as a back end. This will - be a long term project with the eventual goal of allowing the - NFS server to scale beyond a single server system. Hopefully - it will be available for testing in late Spring 2016. pNFS - allows a NFSv4.1 client to do reads/writes directly to a data - server and not the NFS server.
- - -Development of the pNFS server will be in need of testing - or it will never progress to a near production status. I - hope to have code available in FreeBSD's subversion projects - branch for testing in late spring 2016.
-The purpose of this is to enable use of the Signal Processing - Engine found in the NXP/Freescale e500v2 SoC. The SPE uses - opcodes overlapping with Altivec, so is mutually exclusive. - Additionally, the e500v2 does not have a traditional FPU, and - instead uses the SPE for all floating point operations (or - emulation as is currently done). Combined with the fact that - the SPE ABI is incompatible with traditional ABI, a new - MACHINE_ARCH is created to address this.
- -A project branch has been created with the work. A - powerpcspe kernel boots on the RouterBoard RB800, and base - utilities run properly.
- - -Potentially optimizing setjmp/longjmp to not use SPE unless - it's already been enabled. This would save the kernel - switch for processes that don't otherwise use the SPE. This - is a low priority task which may not be completed.
-The major news for this quarter is the update of the i915 - driver in the kernel! The driver now matches Linux 3.8.13, so - it includes initial Haswell support. Linux 3.8 is already - three years old, but work continues to upgrade DRM further. - In particular, the move to linuxkpi was started.
- -In the Ports tree, Mesa was updated to 11.1.2. The next minor - release, 11.2.0, is ready for testing in our development tree. - We also updated libclc to 0.2.0.20151006, a library used by - Mesa to provide OpenCL support.
- -We attended FOSDEM 2016 in Brussels. Jean-S??bastien P??dron - gave a talk to explain the work of the graphics team and show - how people can contribute. It was well received and the - presentation was followed by interesting discussions. FOSDEM - was also a nice occasion to meet and talk again to the nice - "upstream" developers of the graphics stack.
- -For the first year, we added two ideas for GSoC 2016: one for - a kernel task, one to redesign libdevq. Six students - submitted a proposal for those two ideas, that was unexpected! - We now need to decide which one we want to mentor and the - choice is difficult.
- -The blog is still down. We started to work on a replacement. - We will probably go with a static generated website hosted on - GitHub pages.
- - -See the "Graphics" wiki page for up-to-date - information.
-Allwinner SoC are used in multiple hobbyist devboards and - single board computers. Recently, support for these SoC have - received a lot of updates
- -Task done during first quarter :
- -Ongoing task :
- -SPI driver
-LCD Support
-Any unsupported hardware device that might be of - interest.
-FreeBSD Mastery: Specialty Filesystems - is now available everywhere, in print and ebook.
- -Lucas and Allan Jude have also finished writing "FreeBSD - Mastery: Advanced ZFS." It's in copyedit now, and should be - available before May 2016. Check - zfsbook.com for details.
- -Lucas' next book, "PAM Mastery," has a whole bunch of FreeBSD - content in it.
- - -Make grammar corrections to Advanced ZFS, get it in - print.
-Since the last report &os; support for ThunderX has been - significantly improved and stabilized. Semihalf contributions - include the following items:
- -The driver supports all available Ethernet connections (1, - 10, 30 Gbps) and system can can saturate 10 Gbps link (on Tx) - using 4 CPU cores.
- -This work is integrated to the FreeBSD HEAD on on-going - basis.
- - -Support for multi Queue Set operation in VNIC
-The new thread target that directly uses ptrace(2) - was committed upstream and included in GDB 7.11. The port was - also updated to GDB 7.11.
- - -Figure out why the powerpc kgdb targets are not able to - unwind the stack past the initial frame.
-Add support for more platforms (arm, mips, aarch64) to - upstream gdb for both userland and kgdb.
-Add support for debugging powerpc vector registers.
-Add support for catching system calls.
-Add support for $_siginfo.
-Add support for ELF auxv data via 'info auxv'.
-Implement 'info os' commands.
-Implement gdbserver for freebsd.
-A new implementation for support of native PCI-express - hotplug is present at the URL above. Much of the new code - lives in the PCI-PCI bridge driver to handle hotplug events - and manage the PCI-express slot registers. Additional changes - in the branch include adding new 'rescan' and 'delete' - commands to devctl(8) as well as support for - rescanning PCI busses.
- -The current implementation has been tested on systems with - ExpressCard but could use additional testing, especially on - systems with other PCI-express HotPlug features such as - mechanical latches, attention buttons, indicators, etc.
- - -Split branch into separate logical changes as commit - candidates.
-Additional testing.
-The KDE on FreeBSD team focuses on packaging and making sure - that the experience of KDE and Qt on FreeBSD is as good as - possible.
- -While the list of updates is shorter compared to the previous - quarter, the team remained busy and work on KDE Frameworks 5 - and Plasma 5 continues.
- -This quarter, Tobias Berner, who has been driving our KDE - Frameworks 5 and Plasma 5 efforts from the beginning, received - a KDE commit bit, and has been putting it to good use by - upstreaming FreeBSD across several KDE repositories. Another - team highlight in the beginning of this year is the - (re)addition of another committer to our experimental - repository: Adriaan de Groot, a longtime KDE contributor who - also used to work on KDE and FreeBSD almost a decade ago when - our team was first formed. Welcome back, Ade!
- -The following big updates were landed in the ports tree this - quarter. In many cases, we have also contributed patches to - the upstream projects.
- -In our experimental area51 repository, work on Qt 5.6.0 is - underway in our experimental repositories. Additionally, at - the time of writing it also contains KDE Frameworks 5.20.0, - Plasma 5.6.1 and KDE Applications 16.03.80.
- -Users interested in testing those ports are encouraged to - follow the instructions in - our website - and report their results to our mailing list. Qt5 5.6.0 is in - our "qt-5.6" branch, and Plasma 5 and the rest is in the - "plasma5" branch.
- - -Land the KDE Frameworks 5 and Plasma 5 ports to the - tree.
-Commit the DigiKam 4.14.0 update currently being worked on - in our experimental repository.
-POSIX specifies several kinds of pthread locks, for this - report the private and process-shared variants are considered. - Private locks can be used only by the threads of the same - process, which share the address space. Process-shared locks - can be used by threads from any process, assuming the process - can map the lock memory into its address space.
- -Our libthr, the library implementing the POSIX threads and - locking operations, uses a pointer as the internal - representation behind a lock. The pointer contains the - address of the actual structure carrying the lock. This has - unfortunate consequences for implementing the - PTHREAD_PROCESS_SHARED attribute for locks, since - really only the pointer is shared when the lock is mapped into - distinct address spaces.
- -A common opinion was that we have no choice but to break the - libthr Application Binary Interface (ABI) by changing the lock - types to be the actual lock structures (and padding for future - ABI extension). This is very painful for users, as our - previous experience with non-versioned libc and libc_r - shown.
- -Instead, I proposed and implemented a scheme where - process-shared locks can be implemented without breaking the - ABI. The lock memory is used as a key into the system-global - hash of the shared memory objects (off-pages), which carry the - real lock structures.
- -New umtx operations to create or look up the shared object, - by the memory key, were added. Libthr is modified to lookup - the object and use it for shared locks, instead of using - malloc() as for private locks.
- -The pointer value in the user-visible lock type contains a - canary for shared locks. Libthr detects the canary and - switches into the shared-lock mode.
- -The proposal of inlining the lock structures, besides the - drawbacks of breaking ABI, has its merits. Most important, - the inlining avoids the need of indirection. Another - important advantage over the off-page page approach is that no - off-page object needs to be maintained, and the lifecycle of - the shared lock naturally finishes with the destruction of the - shared memory, without explicit cleanup. Right now, off-pages - hook into vm object termination to avoid leakage, but long - liviness of the vnode vm object prolonges the off-page - existence for shared locks backed by files, however unlikely - they may be.
- -Libthr with inlined locks become informally known as libthr2 - project, since the library name better be changed instead of - only bumping the library version. The rtld should ensure that - libthr and libthr2 do not become simultaneously loaded into a - single address space.
- - -Implement robust mutexes.
-Evaluate and implement libthr2.
--
Ruby on Rails is the base for most of the rubygems in the - portstree. Currently version 3.2 and 4.2 coexists, but since - Rails 3.2 runs out of support, the time has come to - switch.
- -There is an ongoing progress to remove Rails 3.2 from the - ports tree. While many gems already work with the new version, - there are some exceptions. For example www/redmine needs a big - update (which is currently tested) because it depends on gems - which therefore depends on Rails 3.2.
- -If you want to help porting or testing, feel free to contact - me or the mailinglist ruby@FreeBSD.org.
- -After nearly a year of work on this project, GitLab 8.5.5 was - committed into the ports tree. A big thanks to the enormous - number of people involved! Since GitLab is a fast moving - project, there is also ongoing work to stay in sync with - upstream. Have fun!
- -Build improvements for buildworld on head continue. - Some highlights include:
- -Opportunistically skipping the bootstrap compiler phase of - buildworld.
-Skipping the 'make obj' tree walk.
-Enabling WITH_META_MODE in buildworld to provide a - reliable incremental build using filemon(4) and bmake's - .MAKE.MODE=meta. This should not be confused with - WITH_DIRDEPS_BUILD which previously was named - WITH_META_MODE and is a drastically different build - system presented at BSDCan 2014 by Simon Gerraty.
-Filemon is a kernel module for tracing which files a command - creates, reads, writes or executes. It allows tracking build - dependencies in combination with bmake's meta mode. Bmake - will store filemon's output in a .meta file along with the - build command and later use this to check if any of the files - references are missing or modified, or if the build command - changes, to trigger a rebuild of the target. It provides the - same functionality as compiler -MF flags but for everything. - It will be critical for buildworld's WITH_META_MODE - (which is the normal buildworld but just using filemon) to - provide a reliable incremental build without even the need of - .depend files or compiler -MF flags. This will allow - -DNO_CLEAN to work all of the time.
- -Over this quarter filemon on head was improved for stability - and performance. It no longer causes every syscall it hooks - into to loop on processes looking for a matching filemon - struct. It now just attaches directly to the struct proc with - its own pointer. This improves performance by reducing lock - contention during a build using it. Much other work went into - improving error handling and other stability issues in the - module as well.
- -All of this work was done by Bryan Drewery, sponsored by EMC, - but much help and identification of bugs was provided by - Mateusz Guzik.
- - -Improving credential handling
-Improving EVENTHANDLER performance
-Possibly providing a framework for syscallenter/syscallret - hooking to avoid the need to hook syscalls as Filemon - does.
-A continuation of the Book-E QorIQ support enhancements by - Semihalf dating back to 2012.
- -The AmigaOne X5000 series of AmigaOS compatible systems uses - the Freescale QorIQ series of SoCs for a desktop-class form - factor. The work here entails adding support for the e5500 - core itself, in addition to support for the SoC - peripherals.
- -Currently most code is checked in to enable basic support: - dTSEC (ethernet), core support (e500mc, e5500). Additionally, - as part of this, rman, the kernel resource manager, was - enhanced to use uintmax_t for resources. This allows devices - to be physically above the 4GB boundary on 32-bit systems. - With a statically compiled device tree, it boots to multiuser - mode, with nfsroot, and can be used as normal (serial and ssh - logins once configured).
- - -eSDHC driver. Work has been started on this, hijacking the - imx_sdhc.c from Ian Lepore, but there are still bugs: - missing DMA from the iMX driver, and odd timeouts after the - system starts up.
-SATA support. There is a WIP driver for the SATA - controller, but it's currently very slow, about 11MB/s on a - SATA 2 link. It currently relies on a 10ms delay on every - SATA transaction, in order for it to be even somewhat - stable. Without this delay, the disk scan never works and I - haven't yet figured out why.
-Local console (VGA) support. It currently boots with a - serial console. vgapci0 is seen if there's a PCIe graphics - card, but vt(4) doesn't attach to it yet.
-64-bit support. The CPU on the board is a P5020, a 64-bit - e5500 dual-core SoC. Currently, booke support in FreeBSD is - 32-bit only.
-SMP. SMP support on Book-E hardware is currently - broken.
-U-boot support. Currently this uses a compiled-in device - tree, but it would be preferred for it to use the device - tree provided by u-boot, or at least the Linux-compatible - device tree.
-More work is needed on the DPAA front (Datapath - Acceleration Architecture) to improve the ethernet driver, - and utilize the SEC engine for crypto, random(4), - and IPSec.
-The FreeBSD German Documentation Project translates FreeBSD's - documentation (handbook, articles, website, etc.) into the - German language.
- -Due to the tireless effort of Bj??rn Heidotting, we made huge - improvements in catching up with the translation of the German - handbook. Benedict helped with reviewing the changes using - FreeBSD's review system Phabricator, which helped a lot. We - now have the following handbook chapters in sync with the - latest version in the English tree:
- -We try to keep up the good work, while also looking at new - ways to translate like the PO/gettext-based system. We are - always looking for volunteers who are interested in - translating small sections or even entire documents. The - process is relatively easy and contributors don't have to know - much to get started. The members of the FreeBSD German - Documentation Team are also willing to mentor people who are - interested in helping out.
- - -Translate more documents.
-The ELF Tool Chain project provides BSD-licensed - implementations of compilation tools and libraries for - building and analyzing ELF objects. The project began as part - of &os; but later became an independent project to encourage - wider participation from others in the open-source developer - community.
- -The ELF Tool Chain project released version 0.7.1 in - February. We have been tracking snapshots of the upstream - repository in &os; and are not blocked waiting for releases to - update. Having an official release brings the benefit of - broader testing and visibility within other open source - projects.
- -In the first quarter of 2016 The ELF Tool Chain tools were - updated to a snapshot of upstream SVN revision 3400, which - is close to the 0.7.1 release. Additional bug fixes were - committed to FreeBSD and subsequently merged into the upstream - repository.
- -ELF Tool Chain's elfcopy(1) is now installed as - objcopy(1) by default as it is a viable replacement - for the base system and ports tree.
- -Significant improvements were made to the - elfcopy(1), readelf(1), and - elfdump(1) tools, including better MIPS, RISC-V, and - AArch64 support.
- - -Fix issues found by fuzzing inputs to the tools.
-Add automatic support for separate debug files.
-Investigate replacement objdump, ld and as - implementations.
-Mellanox is working on a big infiniband update towards - Mellanox OFED v3.2 of the infiniband stack in &os;. The - updates include both userland and kernel. If you are using - infiniband with &os;, patches are available in the link above - which can be downloaded and applied to a recent &os;-head - checkout.
- - -When &os; virtual machines (VMs) run on Hyper-V, using - Hyper-V synthetic devices is recommended to get the best - network and storage performance and make full use of all the - benefits that Hyper-V provides. The collection of drivers that - are required to use Hyper-V synthetic devices in FreeBSD are - known as FreeBSD Integration Services (BIS). Some of the BIS - drivers (like network and storage drivers) have existed in - FreeBSD 9.x and 10.x for years, but there are still some - performance and stability issues and bugs. Compared with - Windows and Linux VMs, the current BIS lacks some useful - features, e.g., live virtual machine backup, TRIM/Unmap, the - support for UEFI VM (boot from UEFI), etc.
- -During the past quarter, we made a great progress on the - performance tuning for Hyper-V network driver. We also - refactored and cleaned up the VMBus driver, and fixed some - important bugs. All the work makes FreeBSD VMs run even better - on Hyper-V and the Hyper-V based cloud platform Azure!
- -Our work during 2016Q1 is documented below:
- -Optimizing the performance of Hyper-V network driver
- -Refactoring and Cleaning up the VMBus driver code
- -Bug Fixing
- -Found a workaround for PR 20824 ([Hyper-V] VM network may not - work over virtual switch based on wireless NIC): add - "net.link.ether.inet.max_age=60" in /etc/sysctl.conf.
- -We plan to add support for live virtual machine backup, - TRIM/Unmap, and UEFI VMs (Hyper-V Generation-2 VMs).
- -We published errata (FreeBSD-EN-16:04.hyperv, - FreeBSD-EN-16:05.hv_netvsc) with the Release Engineering team, - so 10.1 and 10.2 users can easily get the fixes of KVP and TCP - checksum by upgrading the system.
- -We published BIS test cases for Hyper-V on github: - https://github.com/FreeBSDonHyper-V/Test-BIS and we are going - to publish the test cases for Azure soon.
- -This project is sponsored by Microsoft.
- - -As of the end of Q1 the ports tree holds a bit more - than 25,000 ports, and the PR count is below 1,900. The - activity on the ports tree remains steady, with almost 7,000 - commits performed by around 120 active committers.
- -On the problem reports front, the encouraging trend - observed during the previous quarter is confirmed, with again - a significant increase in the number of PRs fixed during Q1. - Indeed, almost 2,400 reports were fixed, which allows us to go - below the threshold value of 2,000 open PRs.
- -In Q1 3 commit bits were taken in for safekeeping, - following an inactivity period of more than 18 months (milki, - brian), or on committer's request (mmoll). We had one - returning committer (fluffy) who had his commit bit - reinstated. Two new developers were granted a ports commit bit - (Olivier Cochard-Labbe, Christoph Moench-Tegeder).
- -On the management side, we had the pleasure to welcome back - miwi to the portmgr team.
- -On QA side 39 exp-runs were performed to validate sensitive - updates or cleanups. The most noticeable change might be the - removal of the now unneeded ${PORTSDIR} when - specifying dependencies in Makefiles (see the - /usr/ports/CHANGES entry dated 20160402). Amongst - other noticeable changes are the update to ruby 2.3, ruby-gems - to 2.5.1, CMake to 3.5.0, clang to 3.8.0-r258968, Qt5 to - 5.5.1, Gnome to 3.18, boost to 1.60.0, the update of libc++ in - base to 3.8.0 release, and the enabling of LLVM libunwind by - default on x86. The CentOS ports were also updated. Some - infrastructure changes included the switch from - bsd.gnome.mk and bsd.mate.mk to the simpler - Uses/gnome.mk and Uses/mate.mk. Some work - was also done to improve poudriere builds by reducing - dependency calculation and general overheads.
- - -We would like to remind everyone that the ports tree is - built and run by volunteers, and any help is greatly - appreciated. A great amount of effort was spent on the ports - front in Q1, which allowed us to decrease the number of - pending problem reports significantly, as well as on the - ports infrastructure. Many thanks to all who - contributed!
-I wrote a small and straightforward yet feature-packed patch - to implement ASLR for &os; available for broader testing.
- -With this change, randomization is applied to all non-fixed - mappings. By randomization I mean the base address for the - mapping is selected with a guaranteed amount of entropy - (bits). If the mapping was requested to be superpage aligned, - the randomization honours the superpage attributes.
- -The randomization is done on a best-effort basis - that is, - the allocator falls back to a first fit strategy if - fragmentation prevents entropy injection. It is trivial to - implement a strong mode where failure to guarantee the - requested amount of entropy results in mapping request - failure, but I do not consider that to be usable.
- -I have not fine-tuned the amount of entropy injected right - now. It is only a quantitive change that will not change the - implementation. The current amount is controlled by - aslr_pages_rnd.
- -To not spoil coalescing optimizations, to reduce the page - table fragmentation inherent to ASLR, and to keep the - transient superpage promotion for the malloced memory, the - locality is implemented for anonymous private mappings, which - are automatically grouped until fragmentation kicks in. The - initial location for the anon group range is, of course, - randomized. After some additional tuning, the measures - appeared to be quite effective. In particular, very - address-space hungry build of PyPy 5.0 on i386 successfully - finished with the most aggressive functionality of the patch - activated.
- -The default mode keeps the sbrk area unpopulated by other - mappings, but this can be turned off, which gives much more - breathing bits on the small AS architectures (funny that - 32bits is considered small). This is tied with the question - of following an application's hint about the mmap(2) - base address. Testing shows that ignoring the hint does not - affect the function of common applications, but I would expect - more demanding code could break. By default sbrk is preserved - and mmap hints are satisfied, which can be changed by using - the kern.elf{32,64}.aslr_care_sbrk sysctl (currently enabled - by default for wider testing).
- -Stack gap, W^X, shared page randomization, KASLR and other - techniques are explicitely out of scope of this work.
- -The paxtest results for the run with the previous version 5 - of the patch applied and aggresively tuned can be seen at the - https://www.kib.kiev.ua/kib/aslr/paxtest.log . For - comparison, the run on Fedora 23 on the same machine is at - https://www.kib.kiev.ua/kib/aslr/fedora.log .
- -ASLR is enabled on per-ABI basis, and currently it is only - enabled on native i386 and amd64 (including compat 32bit) and - ARMv6 ABIs. I expect to test and enable ASLR for arm64 as - well, later.
- -The procctl(2) control for ASLR is implemented, but - I have not provided a userspace wrapper around the syscall. - In fact, the most reasonable control needed is per-image and - not per-process, but we have no tradition to put the - kernel-read attributes into the extattrs of binary, so I am - still pondering that part and this also explains the - non-written tool.
- -Thanks to Oliver Pinter and Shawn Webb of the HardenedBSD - project for pursuing ASLR for &os;. Although this work is - not based on theirs, it was inspired by their efforts.
- -Thanks to Ed Maste, Robert Watson, John Baldwin, and Alan Cox - for some discussions about the patch, and for The FreeBSD - Foundation for directing me.
- -Bartek Rutkowski tested PyPy builds on i386, and David Naylor - helped with the port which was at point of turbulence and - upgrade during the work.
- - -An important missing piece of the RCTL resource limits - framework was the ability to limit file system throughput. - This project aims to fill that hole by making it possible to - add RCTL rules for read bytes per second (BPS), write BPS, - read I/O operations per second (IOPS), and write IOPS, and - adding a new throttling mechanism, to slow down offending - processes when a limit gets hit.
- -The code has been committed and will ship with &os; - 11.0-RELEASE.
- - -Additional testing
-Simplify locking, getting rid of rctl_lock altogether
-Improve statistics gathering by make it possible for - rctl -u to retrieve usage counters at a fixed point - of time
-Use the new throttling mechanism for %CPU limits
-Qt 5.6 is a great framework to build embedded GUI application - so when Qt 5.6 was released it was natural to bring it up on - Raspberry Pi. Current Qt support in ports is very - Xorg-centric so as a proof of concept I created an - experimental qt56-base and qt56-multimedia.
- -qt56-base can be configured for a generic ARM device with the - scfb video driver and specifically for Raspberry Pi in which - case it supports eglfs mode with hardware OpenGL - acceleration.
- - -Check how embedded use cases can be fit into current - bsd.qt.mk or whether a new port should be - introduced.
-A flattened device tree is a way to keep the hardware - description separated from code. During the boot process, the - loader passes a pointer to the device-tree blob to the kernel - and the kernel instantiates and attaches drivers according to - the information in the blob.
- -This approach does not work if hardware is expansible. For - example, the Raspberry Pi and Beaglebone Black have the - concept of capes or shields: snap-on PCBs that are connected - to IO headers on the main board and provide additional - functionality like an LCD screen or GPS receiver. These - shields can be described by their own device trees and these - trees can be overlaid on the base tree by the boot loader, - thus providing an accurate description to the kernel.
- -The proposed patch add this functionality to ubldr. The user - can specify a comma-separated list of overlays as U-Boot or - the loader fdt_overlays variable and ubldr will load them from - /boot/dtb/ directory and do the overlaying.
- - -This is a draft of the January–March 2016 + status report. Please check back after it is finalized, and + an announcement email is sent to the &os;-Announce mailing + list.
+ + This report covers &os;-related projects between January and + March 2016. This is the first of four reports planned for + 2016. + +The first quarter of 2016 was another productive quarter for + the &os; project and community. [...]
+ +Thanks to all the reporters for the excellent work!
+ +The deadline for submissions covering the period from April + to June 2016 is July 7, 2016.
+ ?> +In February, Program Verification Systems used their + PVS-Studio tool to run a static analysis of the &os; kernel. + A Phabricator review was created to allow developers to share + comments on the results. A number of bugs ranging from + trivial typos to redundant code to important logic errors were + found and fixed. Some results were false positives. Several + of these were addressed by changing code that misled the + static analyzer and could also mislead a human reader.
+ +The cooperation that Program Verification Systems offers to + open-source projects like &os; benefits everyone. We thank + them for sharing this analysis and their insights with us.
+ +Federico Caminiti created an entirely new Spanish translation + of the 31,000-word + FAQ + with editorial help from Carlos J Puga Medina.
+ +This landmark accomplishment marks the first use of the new + PO translation system to translate an entire book!
+ +Ruey-Cherng Yu has begun an ambitious Chinese translation + (zh_TW) of the 64,000-word + Porter's Handbook. + About half of the strings in the book have been translated so + far.
+ + +Help add and improve translations of &os; documents into + Spanish: + start of freebsd-translators thread.
+Help add and improve translations of &os; documents into + Chinese or other languages.
+A new option "-manage-gids" was added to the nfsuserd + daemon. This option tells the NFS server to use the list of + groups for a uid on the server and not the list of groups in + the NFS RPC request. Use of this option avoids the 16 group + limit for NFS RPCs using AUTH_SYS (the default).
+ +Work is ongoing with respect to development of pNFS support + for the NFS server using GlusterFS as a back end. This will + be a long term project with the eventual goal of allowing the + NFS server to scale beyond a single server system. Hopefully + it will be available for testing in late Spring 2016. pNFS + allows a NFSv4.1 client to do reads/writes directly to a data + server and not the NFS server.
+ + +Development of the pNFS server will be in need of testing + or it will never progress to a near production status. I + hope to have code available in FreeBSD's subversion projects + branch for testing in late spring 2016.
+The purpose of this is to enable use of the Signal Processing + Engine found in the NXP/Freescale e500v2 SoC. The SPE uses + opcodes overlapping with Altivec, so is mutually exclusive. + Additionally, the e500v2 does not have a traditional FPU, and + instead uses the SPE for all floating point operations (or + emulation as is currently done). Combined with the fact that + the SPE ABI is incompatible with traditional ABI, a new + MACHINE_ARCH is created to address this.
+ +A project branch has been created with the work. A + powerpcspe kernel boots on the RouterBoard RB800, and base + utilities run properly.
+ + +Potentially optimizing setjmp/longjmp to not use SPE unless + it's already been enabled. This would save the kernel + switch for processes that don't otherwise use the SPE. This + is a low priority task which may not be completed.
+The major news for this quarter is the update of the i915 + driver in the kernel! The driver now matches Linux 3.8.13, so + it includes initial Haswell support. Linux 3.8 is already + three years old, but work continues to upgrade DRM further. + In particular, the move to linuxkpi was started.
+ +In the Ports tree, Mesa was updated to 11.1.2. The next minor + release, 11.2.0, is ready for testing in our development tree. + We also updated libclc to 0.2.0.20151006, a library used by + Mesa to provide OpenCL support.
+ +We attended FOSDEM 2016 in Brussels. Jean-S??bastien P??dron + gave a talk to explain the work of the graphics team and show + how people can contribute. It was well received and the + presentation was followed by interesting discussions. FOSDEM + was also a nice occasion to meet and talk again to the nice + "upstream" developers of the graphics stack.
+ +For the first year, we added two ideas for GSoC 2016: one for + a kernel task, one to redesign libdevq. Six students + submitted a proposal for those two ideas, that was unexpected! + We now need to decide which one we want to mentor and the + choice is difficult.
+ +The blog is still down. We started to work on a replacement. + We will probably go with a static generated website hosted on + GitHub pages.
+ + +See the "Graphics" wiki page for up-to-date + information.
+Allwinner SoC are used in multiple hobbyist devboards and + single board computers. Recently, support for these SoC have + received a lot of updates
+ +Task done during first quarter :
+ +Ongoing task :
+ +SPI driver
+LCD Support
+Any unsupported hardware device that might be of + interest.
+FreeBSD Mastery: Specialty Filesystems + is now available everywhere, in print and ebook.
+ +Lucas and Allan Jude have also finished writing "FreeBSD + Mastery: Advanced ZFS." It's in copyedit now, and should be + available before May 2016. Check + zfsbook.com for details.
+ +Lucas' next book, "PAM Mastery," has a whole bunch of FreeBSD + content in it.
+ + +Make grammar corrections to Advanced ZFS, get it in + print.
+Since the last report &os; support for ThunderX has been + significantly improved and stabilized. Semihalf contributions + include the following items:
+ +The driver supports all available Ethernet connections (1, + 10, 30 Gbps) and system can can saturate 10 Gbps link (on Tx) + using 4 CPU cores.
+ +This work is integrated to the FreeBSD HEAD on on-going + basis.
+ + +Support for multi Queue Set operation in VNIC
+The new thread target that directly uses ptrace(2) + was committed upstream and included in GDB 7.11. The port was + also updated to GDB 7.11.
+ + +Figure out why the powerpc kgdb targets are not able to + unwind the stack past the initial frame.
+Add support for more platforms (arm, mips, aarch64) to + upstream gdb for both userland and kgdb.
+Add support for debugging powerpc vector registers.
+Add support for catching system calls.
+Add support for $_siginfo.
+Add support for ELF auxv data via 'info auxv'.
+Implement 'info os' commands.
+Implement gdbserver for freebsd.
+A new implementation for support of native PCI-express + hotplug is present at the URL above. Much of the new code + lives in the PCI-PCI bridge driver to handle hotplug events + and manage the PCI-express slot registers. Additional changes + in the branch include adding new 'rescan' and 'delete' + commands to devctl(8) as well as support for + rescanning PCI busses.
+ +The current implementation has been tested on systems with + ExpressCard but could use additional testing, especially on + systems with other PCI-express HotPlug features such as + mechanical latches, attention buttons, indicators, etc.
+ + +Split branch into separate logical changes as commit + candidates.
+Additional testing.
+The KDE on FreeBSD team focuses on packaging and making sure + that the experience of KDE and Qt on FreeBSD is as good as + possible.
+ +While the list of updates is shorter compared to the previous + quarter, the team remained busy and work on KDE Frameworks 5 + and Plasma 5 continues.
+ +This quarter, Tobias Berner, who has been driving our KDE + Frameworks 5 and Plasma 5 efforts from the beginning, received + a KDE commit bit, and has been putting it to good use by + upstreaming FreeBSD across several KDE repositories. Another + team highlight in the beginning of this year is the + (re)addition of another committer to our experimental + repository: Adriaan de Groot, a longtime KDE contributor who + also used to work on KDE and FreeBSD almost a decade ago when + our team was first formed. Welcome back, Ade!
+ +The following big updates were landed in the ports tree this + quarter. In many cases, we have also contributed patches to + the upstream projects.
+ +In our experimental area51 repository, work on Qt 5.6.0 is + underway in our experimental repositories. Additionally, at + the time of writing it also contains KDE Frameworks 5.20.0, + Plasma 5.6.1 and KDE Applications 16.03.80.
+ +Users interested in testing those ports are encouraged to + follow the instructions in + our website + and report their results to our mailing list. Qt5 5.6.0 is in + our "qt-5.6" branch, and Plasma 5 and the rest is in the + "plasma5" branch.
+ + +Land the KDE Frameworks 5 and Plasma 5 ports to the + tree.
+Commit the DigiKam 4.14.0 update currently being worked on + in our experimental repository.
+POSIX specifies several kinds of pthread locks, for this + report the private and process-shared variants are considered. + Private locks can be used only by the threads of the same + process, which share the address space. Process-shared locks + can be used by threads from any process, assuming the process + can map the lock memory into its address space.
+ +Our libthr, the library implementing the POSIX threads and + locking operations, uses a pointer as the internal + representation behind a lock. The pointer contains the + address of the actual structure carrying the lock. This has + unfortunate consequences for implementing the + PTHREAD_PROCESS_SHARED attribute for locks, since + really only the pointer is shared when the lock is mapped into + distinct address spaces.
+ +A common opinion was that we have no choice but to break the + libthr Application Binary Interface (ABI) by changing the lock + types to be the actual lock structures (and padding for future + ABI extension). This is very painful for users, as our + previous experience with non-versioned libc and libc_r + shown.
+ +Instead, I proposed and implemented a scheme where + process-shared locks can be implemented without breaking the + ABI. The lock memory is used as a key into the system-global + hash of the shared memory objects (off-pages), which carry the + real lock structures.
+ +New umtx operations to create or look up the shared object, + by the memory key, were added. Libthr is modified to lookup + the object and use it for shared locks, instead of using + malloc() as for private locks.
+ +The pointer value in the user-visible lock type contains a + canary for shared locks. Libthr detects the canary and + switches into the shared-lock mode.
+ +The proposal of inlining the lock structures, besides the + drawbacks of breaking ABI, has its merits. Most important, + the inlining avoids the need of indirection. Another + important advantage over the off-page page approach is that no + off-page object needs to be maintained, and the lifecycle of + the shared lock naturally finishes with the destruction of the + shared memory, without explicit cleanup. Right now, off-pages + hook into vm object termination to avoid leakage, but long + liviness of the vnode vm object prolonges the off-page + existence for shared locks backed by files, however unlikely + they may be.
+ +Libthr with inlined locks become informally known as libthr2 + project, since the library name better be changed instead of + only bumping the library version. The rtld should ensure that + libthr and libthr2 do not become simultaneously loaded into a + single address space.
+ + +Implement robust mutexes.
+Evaluate and implement libthr2.
++
Ruby on Rails is the base for most of the rubygems in the + portstree. Currently version 3.2 and 4.2 coexists, but since + Rails 3.2 runs out of support, the time has come to + switch.
+ +There is an ongoing progress to remove Rails 3.2 from the + ports tree. While many gems already work with the new version, + there are some exceptions. For example www/redmine needs a big + update (which is currently tested) because it depends on gems + which therefore depends on Rails 3.2.
+ +If you want to help porting or testing, feel free to contact + me or the mailinglist ruby@FreeBSD.org.
+ +After nearly a year of work on this project, GitLab 8.5.5 was + committed into the ports tree. A big thanks to the enormous + number of people involved! Since GitLab is a fast moving + project, there is also ongoing work to stay in sync with + upstream. Have fun!
+ +Build improvements for buildworld on head continue. + Some highlights include:
+ +Opportunistically skipping the bootstrap compiler phase of + buildworld.
+Skipping the 'make obj' tree walk.
+Enabling WITH_META_MODE in buildworld to provide a + reliable incremental build using filemon(4) and bmake's + .MAKE.MODE=meta. This should not be confused with + WITH_DIRDEPS_BUILD which previously was named + WITH_META_MODE and is a drastically different build + system presented at BSDCan 2014 by Simon Gerraty.
+Filemon is a kernel module for tracing which files a command + creates, reads, writes or executes. It allows tracking build + dependencies in combination with bmake's meta mode. Bmake + will store filemon's output in a .meta file along with the + build command and later use this to check if any of the files + references are missing or modified, or if the build command + changes, to trigger a rebuild of the target. It provides the + same functionality as compiler -MF flags but for everything. + It will be critical for buildworld's WITH_META_MODE + (which is the normal buildworld but just using filemon) to + provide a reliable incremental build without even the need of + .depend files or compiler -MF flags. This will allow + -DNO_CLEAN to work all of the time.
+ +Over this quarter filemon on head was improved for stability + and performance. It no longer causes every syscall it hooks + into to loop on processes looking for a matching filemon + struct. It now just attaches directly to the struct proc with + its own pointer. This improves performance by reducing lock + contention during a build using it. Much other work went into + improving error handling and other stability issues in the + module as well.
+ +All of this work was done by Bryan Drewery, sponsored by EMC, + but much help and identification of bugs was provided by + Mateusz Guzik.
+ + +Improving credential handling
+Improving EVENTHANDLER performance
+Possibly providing a framework for syscallenter/syscallret + hooking to avoid the need to hook syscalls as Filemon + does.
+A continuation of the Book-E QorIQ support enhancements by + Semihalf dating back to 2012.
+ +The AmigaOne X5000 series of AmigaOS compatible systems uses + the Freescale QorIQ series of SoCs for a desktop-class form + factor. The work here entails adding support for the e5500 + core itself, in addition to support for the SoC + peripherals.
+ +Currently most code is checked in to enable basic support: + dTSEC (ethernet), core support (e500mc, e5500). Additionally, + as part of this, rman, the kernel resource manager, was + enhanced to use uintmax_t for resources. This allows devices + to be physically above the 4GB boundary on 32-bit systems. + With a statically compiled device tree, it boots to multiuser + mode, with nfsroot, and can be used as normal (serial and ssh + logins once configured).
+ + +eSDHC driver. Work has been started on this, hijacking the + imx_sdhc.c from Ian Lepore, but there are still bugs: + missing DMA from the iMX driver, and odd timeouts after the + system starts up.
+SATA support. There is a WIP driver for the SATA + controller, but it's currently very slow, about 11MB/s on a + SATA 2 link. It currently relies on a 10ms delay on every + SATA transaction, in order for it to be even somewhat + stable. Without this delay, the disk scan never works and I + haven't yet figured out why.
+Local console (VGA) support. It currently boots with a + serial console. vgapci0 is seen if there's a PCIe graphics + card, but vt(4) doesn't attach to it yet.
+64-bit support. The CPU on the board is a P5020, a 64-bit + e5500 dual-core SoC. Currently, booke support in FreeBSD is + 32-bit only.
+SMP. SMP support on Book-E hardware is currently + broken.
+U-boot support. Currently this uses a compiled-in device + tree, but it would be preferred for it to use the device + tree provided by u-boot, or at least the Linux-compatible + device tree.
+More work is needed on the DPAA front (Datapath + Acceleration Architecture) to improve the ethernet driver, + and utilize the SEC engine for crypto, random(4), + and IPSec.
+The FreeBSD German Documentation Project translates FreeBSD's + documentation (handbook, articles, website, etc.) into the + German language.
+ +Due to the tireless effort of Bj??rn Heidotting, we made huge + improvements in catching up with the translation of the German + handbook. Benedict helped with reviewing the changes using + FreeBSD's review system Phabricator, which helped a lot. We + now have the following handbook chapters in sync with the + latest version in the English tree:
+ +We try to keep up the good work, while also looking at new + ways to translate like the PO/gettext-based system. We are + always looking for volunteers who are interested in + translating small sections or even entire documents. The + process is relatively easy and contributors don't have to know + much to get started. The members of the FreeBSD German + Documentation Team are also willing to mentor people who are + interested in helping out.
+ + +Translate more documents.
+The ELF Tool Chain project provides BSD-licensed + implementations of compilation tools and libraries for + building and analyzing ELF objects. The project began as part + of &os; but later became an independent project to encourage + wider participation from others in the open-source developer + community.
+ +The ELF Tool Chain project released version 0.7.1 in + February. We have been tracking snapshots of the upstream + repository in &os; and are not blocked waiting for releases to + update. Having an official release brings the benefit of + broader testing and visibility within other open source + projects.
+ +In the first quarter of 2016 The ELF Tool Chain tools were + updated to a snapshot of upstream SVN revision 3400, which + is close to the 0.7.1 release. Additional bug fixes were + committed to FreeBSD and subsequently merged into the upstream + repository.
+ +ELF Tool Chain's elfcopy(1) is now installed as + objcopy(1) by default as it is a viable replacement + for the base system and ports tree.
+ +Significant improvements were made to the + elfcopy(1), readelf(1), and + elfdump(1) tools, including better MIPS, RISC-V, and + AArch64 support.
+ + +Fix issues found by fuzzing inputs to the tools.
+Add automatic support for separate debug files.
+Investigate replacement objdump, ld and as + implementations.
+Mellanox is working on a big infiniband update towards + Mellanox OFED v3.2 of the infiniband stack in &os;. The + updates include both userland and kernel. If you are using + infiniband with &os;, patches are available in the link above + which can be downloaded and applied to a recent &os;-head + checkout.
+ + +When &os; virtual machines (VMs) run on Hyper-V, using + Hyper-V synthetic devices is recommended to get the best + network and storage performance and make full use of all the + benefits that Hyper-V provides. The collection of drivers that + are required to use Hyper-V synthetic devices in FreeBSD are + known as FreeBSD Integration Services (BIS). Some of the BIS + drivers (like network and storage drivers) have existed in + FreeBSD 9.x and 10.x for years, but there are still some + performance and stability issues and bugs. Compared with + Windows and Linux VMs, the current BIS lacks some useful + features, e.g., live virtual machine backup, TRIM/Unmap, the + support for UEFI VM (boot from UEFI), etc.
+ +During the past quarter, we made a great progress on the + performance tuning for Hyper-V network driver. We also + refactored and cleaned up the VMBus driver, and fixed some + important bugs. All the work makes FreeBSD VMs run even better + on Hyper-V and the Hyper-V based cloud platform Azure!
+ +Our work during 2016Q1 is documented below:
+ +Optimizing the performance of Hyper-V network driver
+ +Refactoring and Cleaning up the VMBus driver code
+ +Bug Fixing
+ +Found a workaround for PR 20824 ([Hyper-V] VM network may not + work over virtual switch based on wireless NIC): add + "net.link.ether.inet.max_age=60" in /etc/sysctl.conf.
+ +We plan to add support for live virtual machine backup, + TRIM/Unmap, and UEFI VMs (Hyper-V Generation-2 VMs).
+ +We published errata (FreeBSD-EN-16:04.hyperv, + FreeBSD-EN-16:05.hv_netvsc) with the Release Engineering team, + so 10.1 and 10.2 users can easily get the fixes of KVP and TCP + checksum by upgrading the system.
+ +We published BIS test cases for Hyper-V on github: + https://github.com/FreeBSDonHyper-V/Test-BIS and we are going + to publish the test cases for Azure soon.
+ +This project is sponsored by Microsoft.
+ + +As of the end of Q1 the ports tree holds a bit more + than 25,000 ports, and the PR count is below 1,900. The + activity on the ports tree remains steady, with almost 7,000 + commits performed by around 120 active committers.
+ +On the problem reports front, the encouraging trend + observed during the previous quarter is confirmed, with again + a significant increase in the number of PRs fixed during Q1. + Indeed, almost 2,400 reports were fixed, which allows us to go + below the threshold value of 2,000 open PRs.
+ +In Q1 3 commit bits were taken in for safekeeping, + following an inactivity period of more than 18 months (milki, + brian), or on committer's request (mmoll). We had one + returning committer (fluffy) who had his commit bit + reinstated. Two new developers were granted a ports commit bit + (Olivier Cochard-Labbe, Christoph Moench-Tegeder).
+ +On the management side, we had the pleasure to welcome back + miwi to the portmgr team.
+ +On QA side 39 exp-runs were performed to validate sensitive + updates or cleanups. The most noticeable change might be the + removal of the now unneeded ${PORTSDIR} when + specifying dependencies in Makefiles (see the + /usr/ports/CHANGES entry dated 20160402). Amongst + other noticeable changes are the update to ruby 2.3, ruby-gems + to 2.5.1, CMake to 3.5.0, clang to 3.8.0-r258968, Qt5 to + 5.5.1, Gnome to 3.18, boost to 1.60.0, the update of libc++ in + base to 3.8.0 release, and the enabling of LLVM libunwind by + default on x86. The CentOS ports were also updated. Some + infrastructure changes included the switch from + bsd.gnome.mk and bsd.mate.mk to the simpler + Uses/gnome.mk and Uses/mate.mk. Some work + was also done to improve poudriere builds by reducing + dependency calculation and general overheads.
+ + +We would like to remind everyone that the ports tree is + built and run by volunteers, and any help is greatly + appreciated. A great amount of effort was spent on the ports + front in Q1, which allowed us to decrease the number of + pending problem reports significantly, as well as on the + ports infrastructure. Many thanks to all who + contributed!
+I wrote a small and straightforward yet feature-packed patch + to implement ASLR for &os; available for broader testing.
+ +With this change, randomization is applied to all non-fixed + mappings. By randomization I mean the base address for the + mapping is selected with a guaranteed amount of entropy + (bits). If the mapping was requested to be superpage aligned, + the randomization honours the superpage attributes.
+ +The randomization is done on a best-effort basis - that is, + the allocator falls back to a first fit strategy if + fragmentation prevents entropy injection. It is trivial to + implement a strong mode where failure to guarantee the + requested amount of entropy results in mapping request + failure, but I do not consider that to be usable.
+ +I have not fine-tuned the amount of entropy injected right + now. It is only a quantitive change that will not change the + implementation. The current amount is controlled by + aslr_pages_rnd.
+ +To not spoil coalescing optimizations, to reduce the page + table fragmentation inherent to ASLR, and to keep the + transient superpage promotion for the malloced memory, the + locality is implemented for anonymous private mappings, which + are automatically grouped until fragmentation kicks in. The + initial location for the anon group range is, of course, + randomized. After some additional tuning, the measures + appeared to be quite effective. In particular, very + address-space hungry build of PyPy 5.0 on i386 successfully + finished with the most aggressive functionality of the patch + activated.
+ +The default mode keeps the sbrk area unpopulated by other + mappings, but this can be turned off, which gives much more + breathing bits on the small AS architectures (funny that + 32bits is considered small). This is tied with the question + of following an application's hint about the mmap(2) + base address. Testing shows that ignoring the hint does not + affect the function of common applications, but I would expect + more demanding code could break. By default sbrk is preserved + and mmap hints are satisfied, which can be changed by using + the kern.elf{32,64}.aslr_care_sbrk sysctl (currently enabled + by default for wider testing).
+ +Stack gap, W^X, shared page randomization, KASLR and other + techniques are explicitely out of scope of this work.
+ +The paxtest results for the run with the previous version 5 + of the patch applied and aggresively tuned can be seen at the + https://www.kib.kiev.ua/kib/aslr/paxtest.log . For + comparison, the run on Fedora 23 on the same machine is at + https://www.kib.kiev.ua/kib/aslr/fedora.log .
+ +ASLR is enabled on per-ABI basis, and currently it is only + enabled on native i386 and amd64 (including compat 32bit) and + ARMv6 ABIs. I expect to test and enable ASLR for arm64 as + well, later.
+ +The procctl(2) control for ASLR is implemented, but + I have not provided a userspace wrapper around the syscall. + In fact, the most reasonable control needed is per-image and + not per-process, but we have no tradition to put the + kernel-read attributes into the extattrs of binary, so I am + still pondering that part and this also explains the + non-written tool.
+ +Thanks to Oliver Pinter and Shawn Webb of the HardenedBSD + project for pursuing ASLR for &os;. Although this work is + not based on theirs, it was inspired by their efforts.
+ +Thanks to Ed Maste, Robert Watson, John Baldwin, and Alan Cox + for some discussions about the patch, and for The FreeBSD + Foundation for directing me.
+ +Bartek Rutkowski tested PyPy builds on i386, and David Naylor + helped with the port which was at point of turbulence and + upgrade during the work.
+ + +An important missing piece of the RCTL resource limits + framework was the ability to limit file system throughput. + This project aims to fill that hole by making it possible to + add RCTL rules for read bytes per second (BPS), write BPS, + read I/O operations per second (IOPS), and write IOPS, and + adding a new throttling mechanism, to slow down offending + processes when a limit gets hit.
+ +The code has been committed and will ship with &os; + 11.0-RELEASE.
+ + +Additional testing
+Simplify locking, getting rid of rctl_lock altogether
+Improve statistics gathering by make it possible for + rctl -u to retrieve usage counters at a fixed point + of time
+Use the new throttling mechanism for %CPU limits
+Qt 5.6 is a great framework to build embedded GUI application + so when Qt 5.6 was released it was natural to bring it up on + Raspberry Pi. Current Qt support in ports is very + Xorg-centric so as a proof of concept I created an + experimental qt56-base and qt56-multimedia.
+ +qt56-base can be configured for a generic ARM device with the + scfb video driver and specifically for Raspberry Pi in which + case it supports eglfs mode with hardware OpenGL + acceleration.
+ + +Check how embedded use cases can be fit into current + bsd.qt.mk or whether a new port should be + introduced.
+A flattened device tree is a way to keep the hardware + description separated from code. During the boot process, the + loader passes a pointer to the device-tree blob to the kernel + and the kernel instantiates and attaches drivers according to + the information in the blob.
+ +This approach does not work if hardware is expansible. For + example, the Raspberry Pi and Beaglebone Black have the + concept of capes or shields: snap-on PCBs that are connected + to IO headers on the main board and provide additional + functionality like an LCD screen or GPS receiver. These + shields can be described by their own device trees and these + trees can be overlaid on the base tree by the boot loader, + thus providing an accurate description to the kernel.
+ +The proposed patch add this functionality to ubldr. The user + can specify a comma-separated list of overlays as U-Boot or + the loader fdt_overlays variable and ubldr will load them from + /boot/dtb/ directory and do the overlaying.
+ + +