Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| flatteneddevicetree [2010/03/17 12:56] – RafalJaworowski | flatteneddevicetree [2022/06/27 16:24] (current) – Add a noted that you can dump the DTB by sysctl and pipe it into dtc to get dts out again ... BjoernZeeb | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Flattened Device Tree ====== | ====== Flattened Device Tree ====== | ||
| - | This page is dedicated to the project bringing the flattened device tree (FDT) technology to the %%FreeBSD%%. For details contact RafalJaworowski. Work on this project | + | This page is dedicated to the project bringing the flattened device tree (FDT) technology to the %%FreeBSD%%. For details contact RafalJaworowski. Work on this project |
| ====== Abstract ====== | ====== Abstract ====== | ||
| The objective of this project is to provide %%FreeBSD%% with the ability to use flattened device trees for description of hardware resources of a computer | The objective of this project is to provide %%FreeBSD%% with the ability to use flattened device trees for description of hardware resources of a computer | ||
| - | system and their dependencies, | + | system and their dependencies, |
| - | ====== | + | ====== |
| - | In embedded world there is great variety of systems based on same silicon chips, but designed into custom boards and devices, where connections of | + | The code has been committed to the %%FreeBSD%% SVN repository as of r210053, and all development is now supposed to happen in the SVN HEAD. |
| - | individual components are different and there are no conventions or rules, even across members of the same family of products. | + | The obsolete, no longer maintained original project development P4 branch can be found [[http:// |
| + | |||
| + | ====== Introduction ====== | ||
| + | |||
| + | In embedded world there is great variety of systems based on similar | ||
| + | individual components are different and there are no conventions or rules, even across members of the same family of products, for the interconnectios layout and resources allocation. Furthermore, | ||
| * memory layout (address offsets/ | * memory layout (address offsets/ | ||
| Line 20: | Line 25: | ||
| * GPIO/ | * GPIO/ | ||
| - | The concept of flattened device | + | The concept of a **flattened device |
| - | has also been adopted as a basis for Power.org' | + | |
| The idea is inherited from Open Firmware IEEE 1275 device-tree notion (part of the regular Open Firmware implementation), | The idea is inherited from Open Firmware IEEE 1275 device-tree notion (part of the regular Open Firmware implementation), | ||
| Line 31: | Line 35: | ||
| * the kernel (driver) learns about hardware resources details and dependencies from this [externally supplied] blob, which eliminates the need for embedding any info about the underlying platform' | * the kernel (driver) learns about hardware resources details and dependencies from this [externally supplied] blob, which eliminates the need for embedding any info about the underlying platform' | ||
| - | ====== | + | ====== |
| - | [[FlattenedDeviceTree/ | + | This section is meant as a convenient helper for people, who want to quickly check out the idea of using FDT approach. It shows only the statically embedded DTB approach, with SHEEVAPLUG kernel config as an example. For other options and more detailed descriptions please see relevant parts of this manual. |
| - | ====== | + | ===== Build FDT-enabled world ===== |
| - | The official project [[http:// | + | |
| - | ====== Work break down ====== | + | < |
| + | $ cd ${SRC} | ||
| + | $ make -j 8 buildworld TARGET_ARCH=arm -DWITH_FDT | ||
| + | </ | ||
| - | ^ Description ^ Status ^ Comments ^ | + | This creates the dtc compiler utility and FDT-enabled loader(8). |
| - | | dtc: build on %%FreeBSD%% host, integrate | + | |
| - | | libfdt: integrate with build system | Complete. | | | + | ===== Build FDT-enabled kernel ===== |
| - | | loader(8) | + | |
| - | | Handling of embedded | + | Enable support in the kernel, make sure the sys/ |
| - | | Implementation | + | |
| - | | Integration of the FDT support layer with newbus infrastructure | Complete. | Tested | + | < |
| - | | Device | + | # Enable FDT support. |
| - | | Provide | + | options |
| - | | Convert drivers attachment | + | makeoptions |
| - | | Documentation: | + | options |
| + | </ | ||
| + | |||
| + | < | ||
| + | $ make buildkernel TARGET_ARCH=arm KERNCONF=SHEEVAPLUG | ||
| + | </ | ||
| + | |||
| + | The kernel | ||
| + | |||
| + | ===== Boot ===== | ||
| + | |||
| + | The kernel | ||
| + | |||
| + | ====== Definitions ====== | ||
| + | |||
| + | ===== Device tree source (DTS) ===== | ||
| + | |||
| + | The device tree source is a text file which describes hardware resources of a computer system in a human-readable form. See [[FlattenedDeviceTree/example.dts|example snippets]] of a device tree source | ||
| + | |||
| + | The default | ||
| + | |||
| + | < | ||
| + | sys/dts | ||
| + | sys/ | ||
| + | </ | ||
| + | |||
| + | ===== Device tree blob (DTB) ===== | ||
| + | |||
| + | For regular use case the textual device tree description (DTS file) is first converted (compiled) into a binary object (the device tree blob i.e. the DTB), which is handed over to the final consumer (kernel) for parsing and processing of its contents. | ||
| + | |||
| + | ===== Tools, environment ===== | ||
| + | |||
| + | ==== Device tree compiler (dtc) ==== | ||
| + | |||
| + | A stand-alone tool executed on the host, which transforms (compiles) a textual description of a device tree (DTS) into a binary object (DTB). | ||
| + | |||
| + | ==== Supporting library (libfdt) ==== | ||
| + | |||
| + | Helper library providing basic routines for parsing the device tree blob and retrieving data. It is integral part of the //dtc// tool, and can be used in any other code which needs to process the DTB. | ||
| + | |||
| + | In %%FreeBSD%% for FDT-enabled platforms, //libfdt// is therefore also used by loader(8) | ||
| + | |||
| + | ====== Building the dtc tool ====== | ||
| + | |||
| + | ===== FreeBSD buildworld WITH_FDT ===== | ||
| + | |||
| + | The typical way of building the device tree compiler is supplying WITH_FDT setting during buildworld procedure, either via src.conf(5) or manually. | ||
| + | Note the dtc tool has to be built at bootstrap tools building stage of the buildworld procedure, because the build host is not guaranteed to have the compiler installed and readily available. This is similar to other elementary tools required during further stages of the build process (like config, make and others). | ||
| + | |||
| + | < | ||
| + | $ cd $SRC | ||
| + | $ make buildworld | ||
| + | </ | ||
| + | |||
| + | Note the WITH_FDT setting is turned on by default for ARM and %%PowerPC%%. In order to opt out FDT support on these platforms supply WITHOUT_FDT during buildworld procedure. | ||
| + | |||
| + | ====== Building FDT-enabled kernel ====== | ||
| + | |||
| + | In order to run a kernel driven by a flattened | ||
| + | |||
| + | * FDT support enabled in the kernel | ||
| + | |||
| + | * accompanying | ||
| + | |||
| + | The DTB can either be statically | ||
| + | |||
| + | ===== Kernel options ===== | ||
| + | |||
| + | There are a couple of %%FreeBSD%% kernel options available to manage FDT support. | ||
| + | |||
| + | < | ||
| + | # Flattened Device Tree (FDT) support. | ||
| + | # | ||
| + | |||
| + | # Enable FDT support. | ||
| + | options | ||
| + | |||
| + | # Provide a preferred (default) device tree source (DTS) file for the kernel. | ||
| + | # The indicated DTS file will be converted (compiled) into a binary form | ||
| + | # during kernel build stage. | ||
| + | makeoptions | ||
| + | |||
| + | # Statically embed device tree blob (DTB) into a kernel image. This option | ||
| + | # allows using device tree on platforms which do not (cannot) | ||
| + | # in these cases we need to embed the DTB as part of kernel data. This option | ||
| + | # requires a DTS file to be specified | ||
| + | options | ||
| + | </ | ||
| + | |||
| + | Note the FDT_DTS_FILE parameter is a file name specified relative to one of the default directories: | ||
| + | |||
| + | < | ||
| + | sys/dts | ||
| + | sys/ | ||
| + | </ | ||
| + | |||
| + | Currently | ||
| + | |||
| + | ===== Stand-alone DTB ===== | ||
| + | |||
| + | On platforms capable of running loader(8) the default scenario is to use a stand-alone DTB file, which is handled by the loader and handed over to kernel at boot time. In this approach, a DTB should be created at kernel build time: | ||
| + | |||
| + | * If FDT_DTS_FILE is specified | ||
| + | |||
| + | | ||
| + | |||
| + | < | ||
| + | $ make builddtb FDT_DTS_FILE=mpc8572ds.dts | ||
| + | </ | ||
| + | |||
| + | ===== Statically embedded DTB ===== | ||
| + | |||
| + | Platforms without loader(8) support need to include the DTB file as integral part of the kernel image. For this case the FDT_DTB_STATIC option needs to be supplied in kernel config, as well as the FDT_DTS_FILE makeoption (which becomes mandatory in this scenario). At the // | ||
| + | |||
| + | ====== Installing | ||
| + | |||
| + | The kernel installation procedure is no different for an FDT-enabled kernel: standard // | ||
| + | |||
| + | * In case the default DTS file was specified in the kernel config | ||
| + | |||
| + | * If the DTB was created manually, it has to be transferred by hand to the / | ||
| + | |||
| + | ====== Running FDT-enabled kernel ====== | ||
| + | |||
| + | ===== Using loader(8) ===== | ||
| + | |||
| + | ==== Basic usage ==== | ||
| + | |||
| + | The following loader(8) commands are available for the device | ||
| + | |||
| + | < | ||
| + | fdt cd < | ||
| + | fdt header | ||
| + | fdt ls [fdt_path] | ||
| + | fdt mknode [fdt_path/ | ||
| + | fdt mkprop [node_path/ | ||
| + | fdt prop [node_path/ | ||
| + | fdt pwd | ||
| + | fdt rm [node_path/ | ||
| + | </ | ||
| + | |||
| + | === Load blob === | ||
| + | |||
| + | < | ||
| + | loader> load -t dtb boot/ | ||
| + | |||
| + | loader> lsmod | ||
| + | ... | ||
| + | | ||
| + | loader> | ||
| + | </ | ||
| + | |||
| + | === Inspect blob header === | ||
| + | |||
| + | < | ||
| + | loader> fdt header | ||
| + | |||
| + | Flattened | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | last compatible version = 16 | ||
| + | | ||
| + | | ||
| + | | ||
| + | loader> | ||
| + | </ | ||
| + | |||
| + | === List the device tree === | ||
| + | |||
| + | < | ||
| + | loader> fdt ls | ||
| + | |||
| + | /aliases | ||
| + | /cpus | ||
| + | / | ||
| + | /memory | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | loader> | ||
| + | </ | ||
| + | |||
| + | === Boot kernel === | ||
| + | |||
| + | < | ||
| + | loader> load -t dtb boot/ | ||
| + | loader> boot -s | ||
| + | </ | ||
| + | |||
| + | See [[FlattenedDeviceTree/ | ||
| + | |||
| + | The **fdtbus** | ||
| + | |||
| + | < | ||
| + | # devinfo | ||
| + | nexus0 | ||
| + | fdtbus0 | ||
| + | lbc0 | ||
| + | cfi0 | ||
| + | cfid0 | ||
| + | cfi1 | ||
| + | cfid1 | ||
| + | rtc0 | ||
| + | simplebus0 | ||
| + | i2c0 | ||
| + | iicbus0 | ||
| + | iic0 | ||
| + | tsec0 | ||
| + | miibus0 | ||
| + | ciphy0 | ||
| + | tsec1 | ||
| + | miibus1 | ||
| + | ciphy1 | ||
| + | uart0 | ||
| + | uart1 | ||
| + | sec0 | ||
| + | openpic0 | ||
| + | # | ||
| + | </ | ||
| + | |||
| + | ==== More powerful use cases ==== | ||
| + | |||
| + | === Display node properties === | ||
| + | |||
| + | < | ||
| + | loader> fdt prop / | ||
| + | # | ||
| + | #size-cells = < | ||
| + | device_type = " | ||
| + | compatible = " | ||
| + | ranges = < | ||
| + | bus-frequency = < | ||
| + | loader> | ||
| + | </ | ||
| + | |||
| + | === Change existing property value === | ||
| + | |||
| + | < | ||
| + | loader> fdt prop / | ||
| + | device_type = " | ||
| + | reg = < | ||
| + | d-cache-line-size = < | ||
| + | i-cache-line-size = < | ||
| + | d-cache-size = < | ||
| + | i-cache-size = < | ||
| + | timebase-frequency = < | ||
| + | bus-frequency = < | ||
| + | clock-frequency = < | ||
| + | next-level-cache = < | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | loader> fdt prop / | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | loader> fdt prop / | ||
| + | ... | ||
| + | clock-frequency = < | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | === Remove property === | ||
| + | |||
| + | < | ||
| + | loader> fdt prop /aliases | ||
| + | ethernet0 = "/ | ||
| + | ethernet1 = "/ | ||
| + | ethernet2 = "/ | ||
| + | ethernet3 = "/ | ||
| + | serial0 = "/ | ||
| + | serial1 = "/ | ||
| + | pci0 = "/ | ||
| + | pci1 = "/ | ||
| + | pci2 = "/ | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | loader> fdt rm / | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | loader> fdt prop /aliases | ||
| + | ethernet0 = "/ | ||
| + | ethernet1 = "/ | ||
| + | ethernet2 = "/ | ||
| + | ethernet3 = "/ | ||
| + | serial0 = "/ | ||
| + | serial1 = "/ | ||
| + | pci0 = "/ | ||
| + | pci1 = "/ | ||
| + | </ | ||
| + | |||
| + | === Add property to a node === | ||
| + | |||
| + | < | ||
| + | loader> fdt mkprop / | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | loader> fdt prop /aliases | ||
| + | pci2 = "/ | ||
| + | ethernet0 = "/ | ||
| + | ethernet1 = "/ | ||
| + | ethernet2 = "/ | ||
| + | ethernet3 = "/ | ||
| + | serial0 = "/ | ||
| + | serial1 = "/ | ||
| + | pci0 = "/ | ||
| + | pci1 = "/ | ||
| + | </ | ||
| + | |||
| + | === Add node === | ||
| + | |||
| + | < | ||
| + | loader> fdt ls | ||
| + | |||
| + | /aliases | ||
| + | /cpus | ||
| + | / | ||
| + | / | ||
| + | /memory | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | loader> fdt mknode /chosen | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | loader> fdt ls | ||
| + | |||
| + | /chosen | ||
| + | /aliases | ||
| + | /cpus | ||
| + | / | ||
| + | / | ||
| + | /memory | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | === Remove node from the device tree === | ||
| + | |||
| + | < | ||
| + | loader> fdt rm /chosen | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | loader> fdt ls | ||
| + | |||
| + | /aliases | ||
| + | /cpus | ||
| + | / | ||
| + | / | ||
| + | /memory | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | ===== Direct kernel boot ===== | ||
| + | |||
| + | < | ||
| + | Marvell>> | ||
| + | Using egiga0 device | ||
| + | TFTP from server 10.0.0.204; our IP address is 10.0.2.26 | ||
| + | Filename ' | ||
| + | Load address: 0x900000 | ||
| + | Loading: ################################################################# | ||
| + | ################################################################# | ||
| + | ################################################################# | ||
| + | ################################################################# | ||
| + | ################################################################# | ||
| + | ################################################################# | ||
| + | ################################################################# | ||
| + | ################################################################# | ||
| + | ######################################## | ||
| + | done | ||
| + | Bytes transferred = 2864724 (2bb654 hex) | ||
| + | Marvell>> | ||
| + | </ | ||
| + | |||
| + | ====== User space access to the device tree ====== | ||
| + | |||
| + | From the device tree perspective, | ||
| + | |||
| + | < | ||
| + | # ls -al / | ||
| + | crw------- | ||
| + | </ | ||
| + | |||
| + | ===== List all devices in the tree ===== | ||
| + | |||
| + | < | ||
| + | # ofwdump | ||
| + | Node 0xc06309a0: | ||
| + | Node 0xc0630a04: aliases | ||
| + | Node 0xc0630b04: cpus | ||
| + | Node 0xc0630b30: PowerPC,8555@0 | ||
| + | Node 0xc0630bec: memory | ||
| + | Node 0xc0630c24: soc8555@e0000000 | ||
| + | Node 0xc0630cac: ecm-law@0 | ||
| + | Node 0xc0630cfc: ecm@1000 | ||
| + | Node 0xc0630d6c: memory-controller@2000 | ||
| + | Node 0xc0630dec: l2-cache-controller@20000 | ||
| + | Node 0xc0630ea4: i2c@3000 | ||
| + | Node 0xc0630f40: dma@21300 | ||
| + | Node 0xc0630fd8: dma-channel@0 | ||
| + | Node 0xc0631074: dma-channel@80 | ||
| + | Node 0xc0631110: dma-channel@100 | ||
| + | Node 0xc06311ac: dma-channel@180 | ||
| + | Node 0xc063124c: ethernet@24000 | ||
| + | Node 0xc0631360: mdio@520 | ||
| + | Node 0xc06313c4: ethernet-phy@0 | ||
| + | Node 0xc063143c: ethernet-phy@1 | ||
| + | Node 0xc06314b4: tbi-phy@11 | ||
| + | Node 0xc0631504: ethernet@25000 | ||
| + | Node 0xc0631618: mdio@520 | ||
| + | Node 0xc0631678: tbi-phy@11 | ||
| + | Node 0xc06316c8: serial@4500 | ||
| + | Node 0xc063175c: serial@4600 | ||
| + | Node 0xc06317f0: crypto@30000 | ||
| + | Node 0xc0631898: pic@40000 | ||
| + | Node 0xc0631930: cpm@919c0 | ||
| + | Node 0xc06319a8: muram@80000 | ||
| + | Node 0xc06319f0: data@0 | ||
| + | Node 0xc0631a40: brg@919f0 | ||
| + | Node 0xc0631aa8: pic@90c00 | ||
| + | Node 0xc0631b58: pci@e0008000 | ||
| + | Node 0xc0631fa8: i8259@19000 | ||
| + | Node 0xc0632068: pci@e0009000 | ||
| + | # | ||
| + | </code> | ||
| + | |||
| + | ===== List properties of a given node ===== | ||
| + | |||
| + | < | ||
| + | # ofwdump -p /soc8555 | ||
| + | Node 0xc0630c24: soc8555@e0000000 | ||
| + | # | ||
| + | 00 00 00 01 | ||
| + | # | ||
| + | 00 00 00 01 | ||
| + | device_type: | ||
| + | 73 6f 63 00 | ||
| + | ' | ||
| + | compatible: | ||
| + | 73 69 6d 70 6c 65 2d 62 75 73 00 | ||
| + | ' | ||
| + | ranges: | ||
| + | 00 00 00 00 e0 00 00 00 00 10 00 00 | ||
| + | bus-frequency: | ||
| + | 00 00 00 00 | ||
| + | # | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | # ofwdump -p / | ||
| + | Node 0xc063124c: ethernet@24000 | ||
| + | # | ||
| + | 00 00 00 01 | ||
| + | # | ||
| + | 00 00 00 01 | ||
| + | cell-index: | ||
| + | 00 00 00 00 | ||
| + | device_type: | ||
| + | 6e 65 74 77 6f 72 6b 00 | ||
| + | ' | ||
| + | model: | ||
| + | 54 53 45 43 00 | ||
| + | ' | ||
| + | compatible: | ||
| + | 67 69 61 6e 66 61 72 00 | ||
| + | ' | ||
| + | reg: | ||
| + | 00 02 40 00 00 00 10 00 | ||
| + | ranges: | ||
| + | 00 00 00 00 00 02 40 00 00 00 10 00 | ||
| + | local-mac-address: | ||
| + | 00 00 00 00 00 00 | ||
| + | interrupts: | ||
| + | 00 00 00 1d 00 00 00 02 00 00 00 1e 00 00 00 02 00 00 00 22 | ||
| + | 00 00 00 02 | ||
| + | interrupt-parent: | ||
| + | 00 00 00 02 | ||
| + | tbi-handle: | ||
| + | 00 00 00 03 | ||
| + | phy-handle: | ||
| + | 00 00 00 04 | ||
| + | # | ||
| + | </ | ||
| + | |||
| + | ===== Dump dts from loaded dtb ===== | ||
| + | |||
| + | There is another option in case you want to see the DTS you booted with: | ||
| + | |||
| + | < | ||
| + | # sysctl | ||
| + | </ | ||
| + | |||
| + | ====== Advanced topics ====== | ||
| + | |||
| + | ===== How to convert a platform to FDT ===== | ||
| + | |||
| + | ==== Create DTS ==== | ||
| + | |||
| + | * compile, inspect everything is fine | ||
| + | |||
| + | If the dtc has to be (re)built for whatever reason manually, it can be achieved similar to any other user land applications of the base %%FreeBSD%% system. In this case: | ||
| + | |||
| + | < | ||
| + | $ cd gnu/ | ||
| + | $ make | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | $ ./dtc -v | ||
| + | Version: DTC 1.2.0-g46b8d261 | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | $ ./dtc -h | ||
| + | Usage: | ||
| + | dtc [options] <input file> | ||
| + | |||
| + | Options: | ||
| + | -h | ||
| + | This help text | ||
| + | -q | ||
| + | Quiet: -q suppress warnings, -qq errors, -qqq all | ||
| + | -I <input format> | ||
| + | Input formats are: | ||
| + | dts - device tree source text | ||
| + | dtb - device tree blob | ||
| + | fs - / | ||
| + | -o <output file> | ||
| + | -O <output format> | ||
| + | Output formats are: | ||
| + | dts - device tree source text | ||
| + | dtb - device tree blob | ||
| + | asm - assembler source | ||
| + | -V <output version> | ||
| + | Blob version | ||
| + | and asm output only) | ||
| + | -R < | ||
| + | Make space for < | ||
| + | dtb and asm output only) | ||
| + | -S < | ||
| + | Make | ||
| + | -p < | ||
| + | Add padding to the blob of < | ||
| + | -b < | ||
| + | Set the physical boot cpu | ||
| + | -f | ||
| + | Force - try to produce output even if the input tree has errors | ||
| + | -v | ||
| + | Print DTC version and exit | ||
| + | </code> | ||
| + | |||
| + | < | ||
| + | $ ./dtc -O dtb -o mpc8555cds.dtb -b 0 -p 1024 mpc8555cds.dts | ||
| + | DTC: dts-> | ||
| + | $ file mpc8555cds.dtb | ||
| + | mpc8555cds.dtb: | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | $ hexdump -C mpc8555cds.dtb | ||
| + | 00000000 | ||
| + | 00000010 | ||
| + | 00000020 | ||
| + | 00000030 | ||
| + | 00000040 | ||
| + | 00000050 | ||
| + | 00000060 | ||
| + | 00000070 | ||
| + | 00000080 | ||
| + | 00000090 | ||
| + | 000000a0 | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | ==== Use FDT infrastrusture ==== | ||
| + | * fdtbus | ||
| + | * simplebus | ||
| + | |||
| + | ==== Convert individual components (drivers) ==== | ||
| + | |||
| + | ===== Recommended practices ===== | ||
| + | |||
| + | ==== New bindings definitions ==== | ||
| ====== References ====== | ====== References ====== | ||
| - | [[http://ols.fedoraproject.org/OLS/Reprints-2008/likely2-reprint.pdf|A Symphony of Flavours: Using the device tree to describe embedded hardware.]] | + | |
| + | [[http://www.bsdcan.org/2010/schedule/events/ | ||
| + | * [[http:// | ||
| + | * [[http://www.bsdcan.org/ | ||
| [[http:// | [[http:// | ||
| Line 60: | Line 699: | ||
| [[http:// | [[http:// | ||
| - | |||
| - | [[http:// | ||
| - | |||
| - | [[http:// | ||
| [[http:// | [[http:// | ||
| [[http:// | [[http:// | ||
| + | |||
| + | ---- | ||
| + | |||
| + | {{tag> | ||