<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://www.pimyhome.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Joft</id>
	<title>piMyHome Project - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://www.pimyhome.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Joft"/>
	<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Special:Contributions/Joft"/>
	<updated>2026-04-30T13:08:29Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.33.0</generator>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=492</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=492"/>
		<updated>2016-10-04T18:42:16Z</updated>

		<summary type="html">&lt;p&gt;Joft: Add info about toolchains used for firmware v2.00.xx .&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Serial interfaces ==&lt;br /&gt;
&lt;br /&gt;
The DM365 SoC includes two on-chip UARTs [http://www.ti.com/lit/ug/sprufh2/sprufh2.pdf], which are both more or less 8250/16550A compatible ones. For the F454 bticino added a third, external UART, also 8250/16550A compatible, which is apparently attached to the [http://www.ti.com/lit/ug/sprufi1c/sprufi1c.pdf Asynchronous External Memory Interface] of the DM365.&lt;br /&gt;
&lt;br /&gt;
Within Linux they are represented by ''ttySx'' character device nodes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# ls -l /dev/ttyS*&lt;br /&gt;
crw-r-----    1 root     root       4,  64 Feb 21 16:35 /dev/ttyS0&lt;br /&gt;
crw-r-----    1 root     root       4,  65 Feb 22 10:55 /dev/ttyS1&lt;br /&gt;
crw-r-----    1 root     root       4,  66 Feb 22 10:55 /dev/ttyS2&lt;br /&gt;
crw-r-----    1 root     root     204,   5 Nov  8  2012 /dev/ttySA0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Note that the device node ''ttySA0'' (major 204, minor 5) does not really exist. It seems to be a leftover and is not needed/used.&lt;br /&gt;
&lt;br /&gt;
The following table shows how these UARTs are used:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| UART&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Linux device node&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| settings&lt;br /&gt;
|-&lt;br /&gt;
|DM365 UART0&lt;br /&gt;
|/dev/ttyS0&lt;br /&gt;
|BUBL, U-Boot and Linux system console&lt;br /&gt;
|115200 baud / no parity / 8 data bits / 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
|DM365 UART1&lt;br /&gt;
|/dev/ttyS1&lt;br /&gt;
|''SCS AV'' bus communication via a PIC microcontroller&lt;br /&gt;
|38400 baud / no parity / 8 data bits / 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
|external UART&lt;br /&gt;
|/dev/ttyS2&lt;br /&gt;
|''SCS AI'' bus communication via a (second) PIC microcontroller&lt;br /&gt;
|38400 baud / no parity / 8 data bits / 1 stop bit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The settings can be verified by, for example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# stty -a -F /dev/ttyS1&lt;br /&gt;
speed 38400 baud; rows 24; columns 80;&lt;br /&gt;
intr = &amp;lt;undef&amp;gt;; quit = &amp;lt;undef&amp;gt;; erase = &amp;lt;undef&amp;gt;; kill = &amp;lt;undef&amp;gt;; eof = ^D; eol = &amp;lt;undef&amp;gt;; eol2 = &amp;lt;undef&amp;gt;; start = &amp;lt;undef&amp;gt;; stop = &amp;lt;undef&amp;gt;;&lt;br /&gt;
susp = &amp;lt;undef&amp;gt;; rprnt = &amp;lt;undef&amp;gt;; werase = &amp;lt;undef&amp;gt;; lnext = &amp;lt;undef&amp;gt;; flush = &amp;lt;undef&amp;gt;; min = 1; time = 0;&lt;br /&gt;
-parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts&lt;br /&gt;
-ignbrk -brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon ixoff -iuclc -ixany -imaxbel&lt;br /&gt;
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0&lt;br /&gt;
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Accessibility ===&lt;br /&gt;
&lt;br /&gt;
Bticino's F454 [http://www.homesystems-legrandgroup.com/technicalDocuments/type5/MQ00519-b-EN.pdf Technial Sheet] documents there is a ''Serial connector RS232'' behind the hatch of the F454's case, left of the 3 LEDs. It is the connector with the white case, right below the Mini-USB connector.&lt;br /&gt;
&lt;br /&gt;
The 5 pin male connector is of an, at least to your author, unknown type. One of the plugs tried so far is a ''TODO'', but the notches at the sides do not match. However the pin spacing and the position of the pin row relative to the bottom side do match. So, a pocket knife makes the plug fit.&lt;br /&gt;
&lt;br /&gt;
Starting at the left hand side, the first 4 pins show a voltage of 3.3V compared to the right most pin, when using simple multimeter. So, this ''Serial connector RS232'' '''CANNOT''' be a standard [https://en.wikipedia.org/wiki/RS-232 RS-232] interface. It turns out that it is a 3.3V tolerant [https://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter UART] interface. And that is what one would expect of such a SoC like the DM365, anyway.&lt;br /&gt;
&lt;br /&gt;
The purpose of the 5 pins is as follows. Pin numbering starts at the right hand side (LEDs) with 0.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| pin&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| purpose&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|UART RX&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|UART TX&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|''unknown''&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|''unknown''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Connecting one of these UART-to-USB dongles for 3.3V and watching what is send by the F454 during  startup, confirms the assumption that this UART interface is indeed wired to the DM365's UART0 - /dev/ttyS0 from the Linux kernel's point of view. It is run with 115200 baud, 8 data bits and 1 stop bit.&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
For its DaVinci SoCs, to compile Linux kernels, TI recommends [http://processors.wiki.ti.com/index.php/DaVinci_GIT_Linux_Kernel#Overview] CodeSourcery's ''GNU Toolchain for ARM Processors'', version ''2009q1-203'', which can be downloaded as a [http://www.codesourcery.com/sgpp/lite/arm/portal/package4573/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 tar archive] (or a [http://www.codesourcery.com/sgpp/lite/arm/portal/package4573/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi.bin self-extracting archive], ''bigger not recommended'').&lt;br /&gt;
&lt;br /&gt;
TI's [http://arago-project.org Arago Project] also refers to that specific tool chain version [http://arago-project.org/wiki/index.php/Getting_CodeSourcery_Toolchain] - to be used not only for kernel, but to compile everything - from bootloader to userspace applications.&lt;br /&gt;
&lt;br /&gt;
=== Firmware v1.00.xx ===&lt;br /&gt;
&lt;br /&gt;
These old firmware versions seem to be indeed compiled using the toolchain mentioned above. For example, within the Linux kernel binaries this string can be found:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Furthermore this toolchain can also be found, pre-installed, in bticino's [http://www.myopen-legrandgroup.com/devices/gateways/m/f454_-_003598/45317.aspx F454/003598 SDK]. The SDK is a Ubuntu 12.04 Live DVD, with some non-standard programs like this toolchain pre-installed.&lt;br /&gt;
&lt;br /&gt;
=== Firmware v2.00.xxx ===&lt;br /&gt;
&lt;br /&gt;
Current firmware versions are obviously compiled with a different toolchain. Again, from Linux kernel binaries:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gcc version 4.8.2 (GCC)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When looking through the firmware's root filesystem, the following string can be found in the /etc/lsb-release file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Poky (Yocto Project Reference Distro) 1.6.2&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This suggests that the root filesystem is build using the [https://www.yoctoproject.org/ Yocto Project] build system and is derived from its ''reference distribution'' [https://www.yoctoproject.org/tools-resources/projects/poky Poky], version 1.6.2 . This version does actually include GCC v4.8.2 .&lt;br /&gt;
&lt;br /&gt;
Usually the toolchain, including GCC, is compiled as part of the build process of the Yocto Project's build system. That said, the Yocto Project usually offers pre-built toolchains for download as self-extracting archives: [http://downloads.yoctoproject.org/releases/yocto/yocto-1.6.2/toolchain/x86_64/poky-eglibc-x86_64-core-image-sato-armv5te-toolchain-1.6.2.sh poky-eglibc-x86_64-core-image-sato-armv5te-toolchain-1.6.2.sh].&lt;br /&gt;
&lt;br /&gt;
== Boot loader ==&lt;br /&gt;
&lt;br /&gt;
=== ARM ROM boot loader - RBL ===&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM processor starts with executing the ARM ''ROM boot loader'' (RBL), which resides in an on-chip ROM mapped to 0x08000 / 0x18000 (Instruction/Data; size: 16KiB). The RBL searches for a ''user boot loader'' (UBL). In case of the F454 the current assumption is that it does so via DM365's SPI0 interface - on an attached SPI EEPROM.&lt;br /&gt;
&lt;br /&gt;
The RBL expects to find a certain ''magic number'' in the first 32 bit of the EEPROM. This number has be either ''0xa1aced00'' (24 bit addressing) or ''0xa1aced01'' (16 bit addressing).&lt;br /&gt;
&lt;br /&gt;
The magic number must be followed by 20 bytes of additional information, like UBL executable entry point, size of the UBL, start and load addresses, flags ... TI's [http://www.ti.com/lit/pdf/sprufg5 DM36x User's Guide ARM Subsystem] has all the details, chapter 11.2.5, page 188.&lt;br /&gt;
&lt;br /&gt;
After having found this piece of information, the RBL acts accordingly: loads the UBL into the ARM's on-chip TCM RAM0 and RAM1 (2x 16 KiB, at address space offset 0x0000 and 0x4000 respectively) and jumps to the specified entry point.&lt;br /&gt;
&lt;br /&gt;
=== User boot loader - UBL ===&lt;br /&gt;
&lt;br /&gt;
The ''user boot loader'' (UBL) used by the F454 is called ''BUBL'' and its source code can be found on [https://gitorious.org/ gitorious.org] in repository called [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9: medium_platform/bubl].&lt;br /&gt;
&lt;br /&gt;
As of this writing, the latest commit has the hash [https://gitorious.org/medium_platform/bubl/commit/90833fe26b0c5a833054e939909fc887c94561d9 90833fe] . Apparently this is exactly the version used in the F454, since this commit hash can be found in 2 places on the F454 - at runtime (!):&lt;br /&gt;
&lt;br /&gt;
* in the ARM TCM RAM0 and RAM1 (offset 0x5dd4): ''&amp;lt;BUBL 2011.0-rc1-g90833fe&amp;gt;''&lt;br /&gt;
* in the U-Boot environment on eMMC at absolute offset 0x5f000: ''baselineloader_version=BUBL 2011.0-rc1-g90833fe''&lt;br /&gt;
&lt;br /&gt;
This also gives an idea what the leading ''B'' could stands for - apparently ''baseline'' - whatever that means in this case ...&lt;br /&gt;
&lt;br /&gt;
BUBL completes the following [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L109 steps]:&lt;br /&gt;
&lt;br /&gt;
* setup PLL(s)&lt;br /&gt;
* setup timer(s)&lt;br /&gt;
* setup ADC&lt;br /&gt;
* setup DDR memory controller&lt;br /&gt;
* output (using UART0) various [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L44 pieces of information], determined via previously setup ADC (partially info the device bt_nexmed_hwmon.0 under Linux provides, too)&lt;br /&gt;
** board type (''BASI'')&lt;br /&gt;
** hardware version (''???'')&lt;br /&gt;
** boot device (''eMMC'')&lt;br /&gt;
** CPU frequency (''270'')&lt;br /&gt;
** RAM size (''??? MB'')&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
After these initial steps, BUBL [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L202 continues] with loading a binary blob from either NAND or eMMC into RAM. BUBL expects this binary blob to be a U-Boot binary.&lt;br /&gt;
&lt;br /&gt;
* if ADC value 4 says to boot from NAND (NOT the case on F454!)&lt;br /&gt;
** setup NAND interface&lt;br /&gt;
** read U-Boot from NAND (offset?, size?), into RAM at offset 0x81100000&lt;br /&gt;
* else&lt;br /&gt;
** setup MMC/SD interface&lt;br /&gt;
** read U-Boot from eMMC at offset 0x1000, size 256 KiB, into RAM at offset 0x81080000&lt;br /&gt;
&lt;br /&gt;
The binary blob loaded into RAM is checked for validity - if it is really a U-Boot binary (doubleword at offset 0x3c has to be 0xdeadbeef).&lt;br /&gt;
&lt;br /&gt;
If it is not U-Boot or if there is the character ''s'' received on UART0, BUBL discards any loaded binary blob and expects to [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L270 receive a S-record file] from UART0 instead. BUBL writes the received S-record file, translated to binary, into RAM at the offset determined from the S-record file.&lt;br /&gt;
&lt;br /&gt;
The last step is to either jump&lt;br /&gt;
&lt;br /&gt;
* to 0x81100000, in case of U-Boot from NAND  OR&lt;br /&gt;
* to 0x81080000, in case of U-Boot from eMMC  OR&lt;br /&gt;
* to the address determined from the receive S-record file.&lt;br /&gt;
&lt;br /&gt;
=== U-Boot ===&lt;br /&gt;
&lt;br /&gt;
The F454's user boot loader, BUBL, expects to load a U-Boot binary - via MMC/SD interface. It is expected to be 4 KiB into the F454's eMMC (offset 0x1000) and is assumed to be maximally 256 KiB in size.&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at the U-Boot environment (variable ''ver''), and also at the readable ASCII strings of the U-Boot binary, tells us what version of U-Boot is used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# fw_printenv | grep ^ver= | sed 's#^ver=##'&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
&lt;br /&gt;
root@basi:~# dd if=/dev/mmcblk0p1 bs=$((0xe00 + 0)) skip=1 count=$(((256 * 1024) / 0xe00)) 2&amp;gt;/dev/null | strings | grep -e 'U-Boot '&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
ubootver=U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
So it is obviously based on release candidate 2 for U-Boot 2010.12 . The Git commit hash, which follows ''-rc2-'' should tell us about the exact source code version.&lt;br /&gt;
&lt;br /&gt;
bticino published the source code on their [http://github.com/MyOpenCommunity MyOpenCommunity] site on [http://github.com GitHub]. It resides in a Git repository called http://github.com/MyOpenCommunity/u-boot-davinci-medium . As of this writing it's ''master'' branch of this repository is ahead by 3 newer commits. A link to the above mentioned commit hash is: [http://github.com/MyOpenCommunity/u-boot-davinci-medium/commit/3ed2d264ae41bbc05f961a8aececdd636cdb1582 3ed2d264ae41bbc05f961a8aececdd636cdb1582]. &lt;br /&gt;
&lt;br /&gt;
It turns out that this copy of U-Boot has been derived from:&lt;br /&gt;
&lt;br /&gt;
* arago-project.org [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=summary U-Boot for DaVinci], tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c DEV.DavinviBSP.03.01.01.38] (commit [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c 6ebeaa9])&lt;br /&gt;
* denx.de [http://www.denx.de/wiki/U-Boot/WebHome U-Boot], some commits after tag [http://git.denx.de/?p=u-boot.git;a=commit;h=d0d2271f8c62e830ec65fb069b6d12dd708e3e2f v2010.12-rc2] (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=f8689b f8689b])&lt;br /&gt;
&lt;br /&gt;
Note that arago-project.org does also have a tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=1af61f3b812b51f6f41ff37cd4a52ce6cfb21d7a DEV.DavinviBSP.03.01.01.39], which is currently equivalent to where the branch ''r39'' points to. And more interesting: this tag is just one single commit further than where tag DEV.DavinviBSP.03.01.01.38 points to.&lt;br /&gt;
&lt;br /&gt;
To avoid confusion: The [http://github.com/MyOpenCommunity MyOpenCommunity] also has a repository called [http://github.com/MyOpenCommunity/u-boot-davinci-medium-v2 u-boot-davinci-medium-v2]. This is newer version, based on denx.de's U-Boot (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=d41b3cc16fd97da23900f79e8fefdeedeebde8f6 d41b3cc]) - somewhere between versions [http://git.denx.de/?p=u-boot.git;a=commit;h=ebbf0d20aa85f623c49b7ed3349ebfea450c152d v2013.01-rc2] and [http://git.denx.de/?p=u-boot.git;a=commit;h=3ae7b240ad8c723d02aa79654220a07049b7ae4d v2013.01-rc1]. So later shipped F454 devices ''might'' have a U-Boot binary installed which is based on this newer source code base.&lt;br /&gt;
&lt;br /&gt;
==== Operation ====&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/version and /boot, while running F454 firmware version 1.00.37, suggest:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/version &lt;br /&gt;
Linux version 2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429 (bticino@medium1) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #1 PREEMPT Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
root@basi:~# ls -l /boot/&lt;br /&gt;
lrwxrwxrwx    1 root     root           66 Nov  8  2012 uImage -&amp;gt; uImage-2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the used [http://kernel.org Linux] kernel is apparently based on [http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tag/?h=linux-2.6.32.y&amp;amp;id=v2.6.32.17 version 2.6.32.17] within Git repository http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git .&lt;br /&gt;
&lt;br /&gt;
Furthermore, when we look at the kernel image file, called ''uImage'', which get's loaded by U-Boot on startup:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ unzip Firmware_F454_vers010037.zip&lt;br /&gt;
Archive:  Firmware_F454_vers010037.zip&lt;br /&gt;
  inflating: F454_010037.fwz&lt;br /&gt;
$ unzip -P F454  F454_010037.fwz&lt;br /&gt;
Archive:  F454_010037.fwz&lt;br /&gt;
  inflating: btweb_only.ext3.gz      &lt;br /&gt;
  inflating: btweb_only_recovery.ext3.gz  &lt;br /&gt;
  inflating: fwz.xml                 &lt;br /&gt;
  inflating: uImage&lt;br /&gt;
$ mkimage -l uImage &lt;br /&gt;
Image Name:   Arago/2.6.32.17-psp03.01.01.39/b&lt;br /&gt;
Created:      Thu Nov  8 17:02:33 2012&lt;br /&gt;
Image Type:   ARM Linux Kernel Image (uncompressed)&lt;br /&gt;
Data Size:    1720032 Bytes = 1679.72 kB = 1.64 MB&lt;br /&gt;
Load Address: 80008000&lt;br /&gt;
Entry Point:  80008000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We recognize 2 important hints within the ''Image Name'' of the uImage: ''Arago'' and the version amendment ''psp03.01.01.39''. Together with the amendment ''-davinci1'' seen within /proc/version, these 2 hints make a very strong suggestion that the used Linux kernel version is based on one managed by TI as part the [http://arago-project.org/ Arago project]: tag [http://arago-project.org/git/projects/?p=linux-davinci.git;a=commit;h=161e942bbb6e3603bccd1548865cfcce0910f1cc DEV.DaVinciPSP.03.01.01.39] within Git repository git://arago-project.org/git/projects/linux-davinci.git .&lt;br /&gt;
&lt;br /&gt;
All these assumption about on what version the used kernel is based on become certain facts after finding one of bticino's public Git repositories on [http://github.com GitHub]: http://github.com/MyOpenCommunity/linux-davinci-medium . It comprises the commit with the hash [http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429], which occurs in /proc/version as an amendment to the kernel version.&lt;br /&gt;
&lt;br /&gt;
Newer versions of the firmware apparently use slightly newer kernel versions/commits, which can also be found in the mentioned [http://github.com/MyOpenCommunity/linux-davinci-medium repository]. Commits of firmware version 1.00.xx kernels are part of a branch called [https://github.com/MyOpenCommunity/linux-davinci-medium/tree/f454_1 f454_1]. Commits of firmware version 2.00.xx kernels can be found on the [https://github.com/MyOpenCommunity/linux-davinci-medium/tree/basi basi] branch.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| compile stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| kernel version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| commit hash&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:16:09 CET 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/59f7438a4e85d0a2b1b985a65500a9f05366f6ce 59f7438a4e85d0a2b1b985a65500a9f05366f6ce]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep 4 18:03:59 CEST 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/f56c4d42a889cb71bd92d101e9e2b0e847ca1603 f56c4d42a889cb71bd92d101e9e2b0e847ca1603]&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.46&lt;br /&gt;
|Wed Oct 28 10:51:58 CET 2015&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/c44221b9cd7e82d5ec494320685310d138f4dd07 c44221b9cd7e82d5ec494320685310d138f4dd07]&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.48&lt;br /&gt;
|Thu Jan 7 18:34:50 CET 2016&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/c44221b9cd7e82d5ec494320685310d138f4dd07 c44221b9cd7e82d5ec494320685310d138f4dd07]&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.50&lt;br /&gt;
|Thu Feb 11 10:07:14 CET 2016&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/c44221b9cd7e82d5ec494320685310d138f4dd07 c44221b9cd7e82d5ec494320685310d138f4dd07]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
Apparently all kernels include the set of configuration options used to compile them (CONFIG_IKCONFIG=y), because all kernel files have embedded gzip data blobs. To extract such a configuration file from a uImage like the ones found in firmware updates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# extract kernel image, (pure binary, arch/arm/boot/Image)&lt;br /&gt;
$ ZIO=$(binwalk uImage | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }'); \&lt;br /&gt;
	dd if=uImage bs=$ZIO skip=1 | gunzip &amp;gt;Image&lt;br /&gt;
# extract embedded config file&lt;br /&gt;
$ CGZO=$(binwalk Image | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }');&lt;br /&gt;
	dd if=Image bs=$CGZO skip=1 | gunzip &amp;gt;config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It turns out that all four different firmware v1.00.xx kernel versions known so far do have exactly the same configuration. The configuration of the firmware v2.00.xx kernel versions are different from the v1.00.xx ones. However within the v2.00.xx ones it is again the same configuration. The only differences within one family, say between v1.00.xx and v1.00.yy is the typical timestamp which is placed at the beginning of Linux kernel configuration files.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| time stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| md5sum&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:15:22 2014&lt;br /&gt;
|6973e72623f206073f9359035d076ae8&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep  4 18:03:13 2014&lt;br /&gt;
|3e3aaf37a4158eeb1e92417aa51bc16b&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.46&lt;br /&gt;
|Wed Oct 28 10:49:54 2015&lt;br /&gt;
|20b4d997b4a307cb01d2a156f7551179&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.48&lt;br /&gt;
|Thu Jan  7 18:33:28 2016&lt;br /&gt;
|eea14c82b90beb0bb3ba4ba2ccdb91d8&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.50&lt;br /&gt;
|Thu Feb 11 10:05:41 2016&lt;br /&gt;
|0725aaa72d3d58dd0c89e4d4ee5a5458&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following list shows some of the enabled features of both, v1.00.xx and v2.00.xx kernels '''''besides the expected ones''''' (support for the Davinci SoC and it's peripherals). Features, which might be surprising to see and/or which are most likely not really used by the current firmware:&lt;br /&gt;
&lt;br /&gt;
* core&lt;br /&gt;
**  Tickless System&lt;br /&gt;
**  Suspend to RAM and standby&lt;br /&gt;
* network&lt;br /&gt;
**  IPv4&lt;br /&gt;
***  in-kernel DHCP support&lt;br /&gt;
***  IPsec: transport, tunnel and BEET mode&lt;br /&gt;
**  IPv6 (module)&lt;br /&gt;
* drivers&lt;br /&gt;
**  loopback device (module)&lt;br /&gt;
**  TUN/TAP device (module)&lt;br /&gt;
**  PPP with async/sync serial support and deflate compression (modules)&lt;br /&gt;
**  network console logging&lt;br /&gt;
* filesystems&lt;br /&gt;
**  Dnotify and Inotify support&lt;br /&gt;
**  Kernel automounter v4 (module)&lt;br /&gt;
**  FAT&lt;br /&gt;
**  NFS v2 and v3&lt;br /&gt;
**  NFS v2 and v3 server (module)&lt;br /&gt;
**  SMB  (module)&lt;br /&gt;
&lt;br /&gt;
The firmware v2.00.xx kernels do have additional features enabled. Again the list shows just the ones which might be surprising to see.&lt;br /&gt;
&lt;br /&gt;
* network&lt;br /&gt;
** bridge (module)&lt;br /&gt;
*** stp (module)&lt;br /&gt;
*** netfilter, ebtables including DNAT, SNAT (modules)&lt;br /&gt;
** IPv4&lt;br /&gt;
*** netfilter, iptables including connection tracking, NAT, MASQ, STATE, ... (modules)&lt;br /&gt;
** IPv6&lt;br /&gt;
*** netfilter, iptables including connection tracking, STATE, ... (modules)&lt;br /&gt;
* filesystems&lt;br /&gt;
** devtmpfs&lt;br /&gt;
&lt;br /&gt;
On an F454 running firmware version v1.00.37, the following modules are loaded:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# lsmod&lt;br /&gt;
Module                  Size  Used by&lt;br /&gt;
ipv6                  247137  16 &lt;br /&gt;
g_ether                27235  0 &lt;br /&gt;
musb_hdrc              28058  1 g_ether&lt;br /&gt;
dm365mmap               1955  0 &lt;br /&gt;
edmak                  12651  0 &lt;br /&gt;
irqk                    6411  0 &lt;br /&gt;
cmemk                  22327  0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of the above listed features, which are build as modules, just kernel level support for IPv6 is actually loaded. All other loaded modules are peripheral drivers.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=491</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=491"/>
		<updated>2016-10-03T16:53:28Z</updated>

		<summary type="html">&lt;p&gt;Joft: Add details on the serial connector.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Serial interfaces ==&lt;br /&gt;
&lt;br /&gt;
The DM365 SoC includes two on-chip UARTs [http://www.ti.com/lit/ug/sprufh2/sprufh2.pdf], which are both more or less 8250/16550A compatible ones. For the F454 bticino added a third, external UART, also 8250/16550A compatible, which is apparently attached to the [http://www.ti.com/lit/ug/sprufi1c/sprufi1c.pdf Asynchronous External Memory Interface] of the DM365.&lt;br /&gt;
&lt;br /&gt;
Within Linux they are represented by ''ttySx'' character device nodes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# ls -l /dev/ttyS*&lt;br /&gt;
crw-r-----    1 root     root       4,  64 Feb 21 16:35 /dev/ttyS0&lt;br /&gt;
crw-r-----    1 root     root       4,  65 Feb 22 10:55 /dev/ttyS1&lt;br /&gt;
crw-r-----    1 root     root       4,  66 Feb 22 10:55 /dev/ttyS2&lt;br /&gt;
crw-r-----    1 root     root     204,   5 Nov  8  2012 /dev/ttySA0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Note that the device node ''ttySA0'' (major 204, minor 5) does not really exist. It seems to be a leftover and is not needed/used.&lt;br /&gt;
&lt;br /&gt;
The following table shows how these UARTs are used:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| UART&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Linux device node&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| settings&lt;br /&gt;
|-&lt;br /&gt;
|DM365 UART0&lt;br /&gt;
|/dev/ttyS0&lt;br /&gt;
|BUBL, U-Boot and Linux system console&lt;br /&gt;
|115200 baud / no parity / 8 data bits / 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
|DM365 UART1&lt;br /&gt;
|/dev/ttyS1&lt;br /&gt;
|''SCS AV'' bus communication via a PIC microcontroller&lt;br /&gt;
|38400 baud / no parity / 8 data bits / 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
|external UART&lt;br /&gt;
|/dev/ttyS2&lt;br /&gt;
|''SCS AI'' bus communication via a (second) PIC microcontroller&lt;br /&gt;
|38400 baud / no parity / 8 data bits / 1 stop bit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The settings can be verified by, for example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# stty -a -F /dev/ttyS1&lt;br /&gt;
speed 38400 baud; rows 24; columns 80;&lt;br /&gt;
intr = &amp;lt;undef&amp;gt;; quit = &amp;lt;undef&amp;gt;; erase = &amp;lt;undef&amp;gt;; kill = &amp;lt;undef&amp;gt;; eof = ^D; eol = &amp;lt;undef&amp;gt;; eol2 = &amp;lt;undef&amp;gt;; start = &amp;lt;undef&amp;gt;; stop = &amp;lt;undef&amp;gt;;&lt;br /&gt;
susp = &amp;lt;undef&amp;gt;; rprnt = &amp;lt;undef&amp;gt;; werase = &amp;lt;undef&amp;gt;; lnext = &amp;lt;undef&amp;gt;; flush = &amp;lt;undef&amp;gt;; min = 1; time = 0;&lt;br /&gt;
-parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts&lt;br /&gt;
-ignbrk -brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon ixoff -iuclc -ixany -imaxbel&lt;br /&gt;
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0&lt;br /&gt;
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Accessibility ===&lt;br /&gt;
&lt;br /&gt;
Bticino's F454 [http://www.homesystems-legrandgroup.com/technicalDocuments/type5/MQ00519-b-EN.pdf Technial Sheet] documents there is a ''Serial connector RS232'' behind the hatch of the F454's case, left of the 3 LEDs. It is the connector with the white case, right below the Mini-USB connector.&lt;br /&gt;
&lt;br /&gt;
The 5 pin male connector is of an, at least to your author, unknown type. One of the plugs tried so far is a ''TODO'', but the notches at the sides do not match. However the pin spacing and the position of the pin row relative to the bottom side do match. So, a pocket knife makes the plug fit.&lt;br /&gt;
&lt;br /&gt;
Starting at the left hand side, the first 4 pins show a voltage of 3.3V compared to the right most pin, when using simple multimeter. So, this ''Serial connector RS232'' '''CANNOT''' be a standard [https://en.wikipedia.org/wiki/RS-232 RS-232] interface. It turns out that it is a 3.3V tolerant [https://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter UART] interface. And that is what one would expect of such a SoC like the DM365, anyway.&lt;br /&gt;
&lt;br /&gt;
The purpose of the 5 pins is as follows. Pin numbering starts at the right hand side (LEDs) with 0.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| pin&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| purpose&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|GND&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|UART RX&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|UART TX&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|''unknown''&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
|''unknown''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Connecting one of these UART-to-USB dongles for 3.3V and watching what is send by the F454 during  startup, confirms the assumption that this UART interface is indeed wired to the DM365's UART0 - /dev/ttyS0 from the Linux kernel's point of view. It is run with 115200 baud, 8 data bits and 1 stop bit.&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
For its DaVinci SoCs, to compile Linux kernels, TI recommends [http://processors.wiki.ti.com/index.php/DaVinci_GIT_Linux_Kernel#Overview] CodeSourcery's ''GNU Toolchain for ARM Processors'', version ''2009q1-203'', which can be downloaded as a [http://www.codesourcery.com/sgpp/lite/arm/portal/package4573/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 tar archive] (or a [http://www.codesourcery.com/sgpp/lite/arm/portal/package4573/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi.bin self-extracting archive], ''bigger not recommended'').&lt;br /&gt;
&lt;br /&gt;
TI's [http://arago-project.org Arago Project] also refers to that specific tool chain version [http://arago-project.org/wiki/index.php/Getting_CodeSourcery_Toolchain] - to be used not only for kernel, but to compile everything - from bootloader to userspace applications.&lt;br /&gt;
&lt;br /&gt;
This tool chain can also be found, pre-installed, in bticino's [http://www.myopen-legrandgroup.com/devices/gateways/m/f454_-_003598/45317.aspx F454/003598 SDK]. The SDK is a Ubuntu 12.04 Live DVD, with some non-standard programs like this tool chain pre-installed.&lt;br /&gt;
&lt;br /&gt;
== Boot loader ==&lt;br /&gt;
&lt;br /&gt;
=== ARM ROM boot loader - RBL ===&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM processor starts with executing the ARM ''ROM boot loader'' (RBL), which resides in an on-chip ROM mapped to 0x08000 / 0x18000 (Instruction/Data; size: 16KiB). The RBL searches for a ''user boot loader'' (UBL). In case of the F454 the current assumption is that it does so via DM365's SPI0 interface - on an attached SPI EEPROM.&lt;br /&gt;
&lt;br /&gt;
The RBL expects to find a certain ''magic number'' in the first 32 bit of the EEPROM. This number has be either ''0xa1aced00'' (24 bit addressing) or ''0xa1aced01'' (16 bit addressing).&lt;br /&gt;
&lt;br /&gt;
The magic number must be followed by 20 bytes of additional information, like UBL executable entry point, size of the UBL, start and load addresses, flags ... TI's [http://www.ti.com/lit/pdf/sprufg5 DM36x User's Guide ARM Subsystem] has all the details, chapter 11.2.5, page 188.&lt;br /&gt;
&lt;br /&gt;
After having found this piece of information, the RBL acts accordingly: loads the UBL into the ARM's on-chip TCM RAM0 and RAM1 (2x 16 KiB, at address space offset 0x0000 and 0x4000 respectively) and jumps to the specified entry point.&lt;br /&gt;
&lt;br /&gt;
=== User boot loader - UBL ===&lt;br /&gt;
&lt;br /&gt;
The ''user boot loader'' (UBL) used by the F454 is called ''BUBL'' and its source code can be found on [https://gitorious.org/ gitorious.org] in repository called [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9: medium_platform/bubl].&lt;br /&gt;
&lt;br /&gt;
As of this writing, the latest commit has the hash [https://gitorious.org/medium_platform/bubl/commit/90833fe26b0c5a833054e939909fc887c94561d9 90833fe] . Apparently this is exactly the version used in the F454, since this commit hash can be found in 2 places on the F454 - at runtime (!):&lt;br /&gt;
&lt;br /&gt;
* in the ARM TCM RAM0 and RAM1 (offset 0x5dd4): ''&amp;lt;BUBL 2011.0-rc1-g90833fe&amp;gt;''&lt;br /&gt;
* in the U-Boot environment on eMMC at absolute offset 0x5f000: ''baselineloader_version=BUBL 2011.0-rc1-g90833fe''&lt;br /&gt;
&lt;br /&gt;
This also gives an idea what the leading ''B'' could stands for - apparently ''baseline'' - whatever that means in this case ...&lt;br /&gt;
&lt;br /&gt;
BUBL completes the following [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L109 steps]:&lt;br /&gt;
&lt;br /&gt;
* setup PLL(s)&lt;br /&gt;
* setup timer(s)&lt;br /&gt;
* setup ADC&lt;br /&gt;
* setup DDR memory controller&lt;br /&gt;
* output (using UART0) various [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L44 pieces of information], determined via previously setup ADC (partially info the device bt_nexmed_hwmon.0 under Linux provides, too)&lt;br /&gt;
** board type (''BASI'')&lt;br /&gt;
** hardware version (''???'')&lt;br /&gt;
** boot device (''eMMC'')&lt;br /&gt;
** CPU frequency (''270'')&lt;br /&gt;
** RAM size (''??? MB'')&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
After these initial steps, BUBL [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L202 continues] with loading a binary blob from either NAND or eMMC into RAM. BUBL expects this binary blob to be a U-Boot binary.&lt;br /&gt;
&lt;br /&gt;
* if ADC value 4 says to boot from NAND (NOT the case on F454!)&lt;br /&gt;
** setup NAND interface&lt;br /&gt;
** read U-Boot from NAND (offset?, size?), into RAM at offset 0x81100000&lt;br /&gt;
* else&lt;br /&gt;
** setup MMC/SD interface&lt;br /&gt;
** read U-Boot from eMMC at offset 0x1000, size 256 KiB, into RAM at offset 0x81080000&lt;br /&gt;
&lt;br /&gt;
The binary blob loaded into RAM is checked for validity - if it is really a U-Boot binary (doubleword at offset 0x3c has to be 0xdeadbeef).&lt;br /&gt;
&lt;br /&gt;
If it is not U-Boot or if there is the character ''s'' received on UART0, BUBL discards any loaded binary blob and expects to [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L270 receive a S-record file] from UART0 instead. BUBL writes the received S-record file, translated to binary, into RAM at the offset determined from the S-record file.&lt;br /&gt;
&lt;br /&gt;
The last step is to either jump&lt;br /&gt;
&lt;br /&gt;
* to 0x81100000, in case of U-Boot from NAND  OR&lt;br /&gt;
* to 0x81080000, in case of U-Boot from eMMC  OR&lt;br /&gt;
* to the address determined from the receive S-record file.&lt;br /&gt;
&lt;br /&gt;
=== U-Boot ===&lt;br /&gt;
&lt;br /&gt;
The F454's user boot loader, BUBL, expects to load a U-Boot binary - via MMC/SD interface. It is expected to be 4 KiB into the F454's eMMC (offset 0x1000) and is assumed to be maximally 256 KiB in size.&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at the U-Boot environment (variable ''ver''), and also at the readable ASCII strings of the U-Boot binary, tells us what version of U-Boot is used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# fw_printenv | grep ^ver= | sed 's#^ver=##'&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
&lt;br /&gt;
root@basi:~# dd if=/dev/mmcblk0p1 bs=$((0xe00 + 0)) skip=1 count=$(((256 * 1024) / 0xe00)) 2&amp;gt;/dev/null | strings | grep -e 'U-Boot '&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
ubootver=U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
So it is obviously based on release candidate 2 for U-Boot 2010.12 . The Git commit hash, which follows ''-rc2-'' should tell us about the exact source code version.&lt;br /&gt;
&lt;br /&gt;
bticino published the source code on their [http://github.com/MyOpenCommunity MyOpenCommunity] site on [http://github.com GitHub]. It resides in a Git repository called http://github.com/MyOpenCommunity/u-boot-davinci-medium . As of this writing it's ''master'' branch of this repository is ahead by 3 newer commits. A link to the above mentioned commit hash is: [http://github.com/MyOpenCommunity/u-boot-davinci-medium/commit/3ed2d264ae41bbc05f961a8aececdd636cdb1582 3ed2d264ae41bbc05f961a8aececdd636cdb1582]. &lt;br /&gt;
&lt;br /&gt;
It turns out that this copy of U-Boot has been derived from:&lt;br /&gt;
&lt;br /&gt;
* arago-project.org [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=summary U-Boot for DaVinci], tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c DEV.DavinviBSP.03.01.01.38] (commit [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c 6ebeaa9])&lt;br /&gt;
* denx.de [http://www.denx.de/wiki/U-Boot/WebHome U-Boot], some commits after tag [http://git.denx.de/?p=u-boot.git;a=commit;h=d0d2271f8c62e830ec65fb069b6d12dd708e3e2f v2010.12-rc2] (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=f8689b f8689b])&lt;br /&gt;
&lt;br /&gt;
Note that arago-project.org does also have a tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=1af61f3b812b51f6f41ff37cd4a52ce6cfb21d7a DEV.DavinviBSP.03.01.01.39], which is currently equivalent to where the branch ''r39'' points to. And more interesting: this tag is just one single commit further than where tag DEV.DavinviBSP.03.01.01.38 points to.&lt;br /&gt;
&lt;br /&gt;
To avoid confusion: The [http://github.com/MyOpenCommunity MyOpenCommunity] also has a repository called [http://github.com/MyOpenCommunity/u-boot-davinci-medium-v2 u-boot-davinci-medium-v2]. This is newer version, based on denx.de's U-Boot (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=d41b3cc16fd97da23900f79e8fefdeedeebde8f6 d41b3cc]) - somewhere between versions [http://git.denx.de/?p=u-boot.git;a=commit;h=ebbf0d20aa85f623c49b7ed3349ebfea450c152d v2013.01-rc2] and [http://git.denx.de/?p=u-boot.git;a=commit;h=3ae7b240ad8c723d02aa79654220a07049b7ae4d v2013.01-rc1]. So later shipped F454 devices ''might'' have a U-Boot binary installed which is based on this newer source code base.&lt;br /&gt;
&lt;br /&gt;
==== Operation ====&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/version and /boot, while running F454 firmware version 1.00.37, suggest:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/version &lt;br /&gt;
Linux version 2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429 (bticino@medium1) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #1 PREEMPT Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
root@basi:~# ls -l /boot/&lt;br /&gt;
lrwxrwxrwx    1 root     root           66 Nov  8  2012 uImage -&amp;gt; uImage-2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the used [http://kernel.org Linux] kernel is apparently based on [http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tag/?h=linux-2.6.32.y&amp;amp;id=v2.6.32.17 version 2.6.32.17] within Git repository http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git .&lt;br /&gt;
&lt;br /&gt;
Furthermore, when we look at the kernel image file, called ''uImage'', which get's loaded by U-Boot on startup:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ unzip Firmware_F454_vers010037.zip&lt;br /&gt;
Archive:  Firmware_F454_vers010037.zip&lt;br /&gt;
  inflating: F454_010037.fwz&lt;br /&gt;
$ unzip -P F454  F454_010037.fwz&lt;br /&gt;
Archive:  F454_010037.fwz&lt;br /&gt;
  inflating: btweb_only.ext3.gz      &lt;br /&gt;
  inflating: btweb_only_recovery.ext3.gz  &lt;br /&gt;
  inflating: fwz.xml                 &lt;br /&gt;
  inflating: uImage&lt;br /&gt;
$ mkimage -l uImage &lt;br /&gt;
Image Name:   Arago/2.6.32.17-psp03.01.01.39/b&lt;br /&gt;
Created:      Thu Nov  8 17:02:33 2012&lt;br /&gt;
Image Type:   ARM Linux Kernel Image (uncompressed)&lt;br /&gt;
Data Size:    1720032 Bytes = 1679.72 kB = 1.64 MB&lt;br /&gt;
Load Address: 80008000&lt;br /&gt;
Entry Point:  80008000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We recognize 2 important hints within the ''Image Name'' of the uImage: ''Arago'' and the version amendment ''psp03.01.01.39''. Together with the amendment ''-davinci1'' seen within /proc/version, these 2 hints make a very strong suggestion that the used Linux kernel version is based on one managed by TI as part the [http://arago-project.org/ Arago project]: tag [http://arago-project.org/git/projects/?p=linux-davinci.git;a=commit;h=161e942bbb6e3603bccd1548865cfcce0910f1cc DEV.DaVinciPSP.03.01.01.39] within Git repository git://arago-project.org/git/projects/linux-davinci.git .&lt;br /&gt;
&lt;br /&gt;
All these assumption about on what version the used kernel is based on become certain facts after finding one of bticino's public Git repositories on [http://github.com GitHub]: http://github.com/MyOpenCommunity/linux-davinci-medium . It comprises the commit with the hash [http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429], which occurs in /proc/version as an amendment to the kernel version.&lt;br /&gt;
&lt;br /&gt;
Newer versions of the firmware apparently use slightly newer kernel versions/commits, which can also be found in the mentioned [http://github.com/MyOpenCommunity/linux-davinci-medium repository]. Commits of firmware version 1.00.xx kernels are part of a branch called [https://github.com/MyOpenCommunity/linux-davinci-medium/tree/f454_1 f454_1]. Commits of firmware version 2.00.xx kernels can be found on the [https://github.com/MyOpenCommunity/linux-davinci-medium/tree/basi basi] branch.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| compile stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| kernel version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| commit hash&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:16:09 CET 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/59f7438a4e85d0a2b1b985a65500a9f05366f6ce 59f7438a4e85d0a2b1b985a65500a9f05366f6ce]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep 4 18:03:59 CEST 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/f56c4d42a889cb71bd92d101e9e2b0e847ca1603 f56c4d42a889cb71bd92d101e9e2b0e847ca1603]&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.46&lt;br /&gt;
|Wed Oct 28 10:51:58 CET 2015&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/c44221b9cd7e82d5ec494320685310d138f4dd07 c44221b9cd7e82d5ec494320685310d138f4dd07]&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.48&lt;br /&gt;
|Thu Jan 7 18:34:50 CET 2016&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/c44221b9cd7e82d5ec494320685310d138f4dd07 c44221b9cd7e82d5ec494320685310d138f4dd07]&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.50&lt;br /&gt;
|Thu Feb 11 10:07:14 CET 2016&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/c44221b9cd7e82d5ec494320685310d138f4dd07 c44221b9cd7e82d5ec494320685310d138f4dd07]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
Apparently all kernels include the set of configuration options used to compile them (CONFIG_IKCONFIG=y), because all kernel files have embedded gzip data blobs. To extract such a configuration file from a uImage like the ones found in firmware updates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# extract kernel image, (pure binary, arch/arm/boot/Image)&lt;br /&gt;
$ ZIO=$(binwalk uImage | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }'); \&lt;br /&gt;
	dd if=uImage bs=$ZIO skip=1 | gunzip &amp;gt;Image&lt;br /&gt;
# extract embedded config file&lt;br /&gt;
$ CGZO=$(binwalk Image | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }');&lt;br /&gt;
	dd if=Image bs=$CGZO skip=1 | gunzip &amp;gt;config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It turns out that all four different firmware v1.00.xx kernel versions known so far do have exactly the same configuration. The configuration of the firmware v2.00.xx kernel versions are different from the v1.00.xx ones. However within the v2.00.xx ones it is again the same configuration. The only differences within one family, say between v1.00.xx and v1.00.yy is the typical timestamp which is placed at the beginning of Linux kernel configuration files.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| time stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| md5sum&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:15:22 2014&lt;br /&gt;
|6973e72623f206073f9359035d076ae8&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep  4 18:03:13 2014&lt;br /&gt;
|3e3aaf37a4158eeb1e92417aa51bc16b&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.46&lt;br /&gt;
|Wed Oct 28 10:49:54 2015&lt;br /&gt;
|20b4d997b4a307cb01d2a156f7551179&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.48&lt;br /&gt;
|Thu Jan  7 18:33:28 2016&lt;br /&gt;
|eea14c82b90beb0bb3ba4ba2ccdb91d8&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.50&lt;br /&gt;
|Thu Feb 11 10:05:41 2016&lt;br /&gt;
|0725aaa72d3d58dd0c89e4d4ee5a5458&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following list shows some of the enabled features of both, v1.00.xx and v2.00.xx kernels '''''besides the expected ones''''' (support for the Davinci SoC and it's peripherals). Features, which might be surprising to see and/or which are most likely not really used by the current firmware:&lt;br /&gt;
&lt;br /&gt;
* core&lt;br /&gt;
**  Tickless System&lt;br /&gt;
**  Suspend to RAM and standby&lt;br /&gt;
* network&lt;br /&gt;
**  IPv4&lt;br /&gt;
***  in-kernel DHCP support&lt;br /&gt;
***  IPsec: transport, tunnel and BEET mode&lt;br /&gt;
**  IPv6 (module)&lt;br /&gt;
* drivers&lt;br /&gt;
**  loopback device (module)&lt;br /&gt;
**  TUN/TAP device (module)&lt;br /&gt;
**  PPP with async/sync serial support and deflate compression (modules)&lt;br /&gt;
**  network console logging&lt;br /&gt;
* filesystems&lt;br /&gt;
**  Dnotify and Inotify support&lt;br /&gt;
**  Kernel automounter v4 (module)&lt;br /&gt;
**  FAT&lt;br /&gt;
**  NFS v2 and v3&lt;br /&gt;
**  NFS v2 and v3 server (module)&lt;br /&gt;
**  SMB  (module)&lt;br /&gt;
&lt;br /&gt;
The firmware v2.00.xx kernels do have additional features enabled. Again the list shows just the ones which might be surprising to see.&lt;br /&gt;
&lt;br /&gt;
* network&lt;br /&gt;
** bridge (module)&lt;br /&gt;
*** stp (module)&lt;br /&gt;
*** netfilter, ebtables including DNAT, SNAT (modules)&lt;br /&gt;
** IPv4&lt;br /&gt;
*** netfilter, iptables including connection tracking, NAT, MASQ, STATE, ... (modules)&lt;br /&gt;
** IPv6&lt;br /&gt;
*** netfilter, iptables including connection tracking, STATE, ... (modules)&lt;br /&gt;
* filesystems&lt;br /&gt;
** devtmpfs&lt;br /&gt;
&lt;br /&gt;
On an F454 running firmware version v1.00.37, the following modules are loaded:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# lsmod&lt;br /&gt;
Module                  Size  Used by&lt;br /&gt;
ipv6                  247137  16 &lt;br /&gt;
g_ether                27235  0 &lt;br /&gt;
musb_hdrc              28058  1 g_ether&lt;br /&gt;
dm365mmap               1955  0 &lt;br /&gt;
edmak                  12651  0 &lt;br /&gt;
irqk                    6411  0 &lt;br /&gt;
cmemk                  22327  0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of the above listed features, which are build as modules, just kernel level support for IPv6 is actually loaded. All other loaded modules are peripheral drivers.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=490</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=490"/>
		<updated>2016-10-03T15:41:19Z</updated>

		<summary type="html">&lt;p&gt;Joft: Add info about firmware v2.00.xx kernel configurations.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Serial interfaces ==&lt;br /&gt;
&lt;br /&gt;
The DM365 SoC includes two on-chip UARTs [http://www.ti.com/lit/ug/sprufh2/sprufh2.pdf], which are both more or less 8250/16550A compatible ones. For the F454 bticino added a third, external UART, also 8250/16550A compatible, which is apparently attached to the [http://www.ti.com/lit/ug/sprufi1c/sprufi1c.pdf Asynchronous External Memory Interface] of the DM365.&lt;br /&gt;
&lt;br /&gt;
Within Linux they are represented by ''ttySx'' character device nodes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# ls -l /dev/ttyS*&lt;br /&gt;
crw-r-----    1 root     root       4,  64 Feb 21 16:35 /dev/ttyS0&lt;br /&gt;
crw-r-----    1 root     root       4,  65 Feb 22 10:55 /dev/ttyS1&lt;br /&gt;
crw-r-----    1 root     root       4,  66 Feb 22 10:55 /dev/ttyS2&lt;br /&gt;
crw-r-----    1 root     root     204,   5 Nov  8  2012 /dev/ttySA0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Note that the device node ''ttySA0'' (major 204, minor 5) does not really exist. It seems to be a leftover and is not needed/used.&lt;br /&gt;
&lt;br /&gt;
The following table shows how these UARTs are used:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| UART&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Linux device node&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| settings&lt;br /&gt;
|-&lt;br /&gt;
|DM365 UART0&lt;br /&gt;
|/dev/ttyS0&lt;br /&gt;
|BUBL, U-Boot and Linux system console&lt;br /&gt;
|115200 baud / no parity / 8 data bits / 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
|DM365 UART1&lt;br /&gt;
|/dev/ttyS1&lt;br /&gt;
|''SCS AV'' bus communication via a PIC microcontroller&lt;br /&gt;
|38400 baud / no parity / 8 data bits / 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
|external UART&lt;br /&gt;
|/dev/ttyS2&lt;br /&gt;
|''SCS AI'' bus communication via a (second) PIC microcontroller&lt;br /&gt;
|38400 baud / no parity / 8 data bits / 1 stop bit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The settings can be verified by, for example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# stty -a -F /dev/ttyS1&lt;br /&gt;
speed 38400 baud; rows 24; columns 80;&lt;br /&gt;
intr = &amp;lt;undef&amp;gt;; quit = &amp;lt;undef&amp;gt;; erase = &amp;lt;undef&amp;gt;; kill = &amp;lt;undef&amp;gt;; eof = ^D; eol = &amp;lt;undef&amp;gt;; eol2 = &amp;lt;undef&amp;gt;; start = &amp;lt;undef&amp;gt;; stop = &amp;lt;undef&amp;gt;;&lt;br /&gt;
susp = &amp;lt;undef&amp;gt;; rprnt = &amp;lt;undef&amp;gt;; werase = &amp;lt;undef&amp;gt;; lnext = &amp;lt;undef&amp;gt;; flush = &amp;lt;undef&amp;gt;; min = 1; time = 0;&lt;br /&gt;
-parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts&lt;br /&gt;
-ignbrk -brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon ixoff -iuclc -ixany -imaxbel&lt;br /&gt;
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0&lt;br /&gt;
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Accessibility ===&lt;br /&gt;
&lt;br /&gt;
Bticino's F454 [http://www.homesystems-legrandgroup.com/technicalDocuments/type5/MQ00519-b-EN.pdf Technial Sheet] documents there is a ''Serial connector RS232'' behind the hatch of the F454's case, left of the 3 LEDs. &lt;br /&gt;
&lt;br /&gt;
It is a 5 pin male connector of an, at least to your author, unknown type ''(TODO)''. In general it seems more than likely that this connector is going to UART0, the system console. However it remains unclear, which pins are what (3 needed at least: GND, TX, RX) and what the voltage levels are ''(TODO)''. Of course, the designation ''RS232'' is a pretty clear statement and suggests that the PCB includes a MAX232 or similar and thus it could be directly connected to a PCs serial port/USB-to-serial.&lt;br /&gt;
&lt;br /&gt;
''TODO: try it out, determine pins''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
For its DaVinci SoCs, to compile Linux kernels, TI recommends [http://processors.wiki.ti.com/index.php/DaVinci_GIT_Linux_Kernel#Overview] CodeSourcery's ''GNU Toolchain for ARM Processors'', version ''2009q1-203'', which can be downloaded as a [http://www.codesourcery.com/sgpp/lite/arm/portal/package4573/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 tar archive] (or a [http://www.codesourcery.com/sgpp/lite/arm/portal/package4573/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi.bin self-extracting archive], ''bigger not recommended'').&lt;br /&gt;
&lt;br /&gt;
TI's [http://arago-project.org Arago Project] also refers to that specific tool chain version [http://arago-project.org/wiki/index.php/Getting_CodeSourcery_Toolchain] - to be used not only for kernel, but to compile everything - from bootloader to userspace applications.&lt;br /&gt;
&lt;br /&gt;
This tool chain can also be found, pre-installed, in bticino's [http://www.myopen-legrandgroup.com/devices/gateways/m/f454_-_003598/45317.aspx F454/003598 SDK]. The SDK is a Ubuntu 12.04 Live DVD, with some non-standard programs like this tool chain pre-installed.&lt;br /&gt;
&lt;br /&gt;
== Boot loader ==&lt;br /&gt;
&lt;br /&gt;
=== ARM ROM boot loader - RBL ===&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM processor starts with executing the ARM ''ROM boot loader'' (RBL), which resides in an on-chip ROM mapped to 0x08000 / 0x18000 (Instruction/Data; size: 16KiB). The RBL searches for a ''user boot loader'' (UBL). In case of the F454 the current assumption is that it does so via DM365's SPI0 interface - on an attached SPI EEPROM.&lt;br /&gt;
&lt;br /&gt;
The RBL expects to find a certain ''magic number'' in the first 32 bit of the EEPROM. This number has be either ''0xa1aced00'' (24 bit addressing) or ''0xa1aced01'' (16 bit addressing).&lt;br /&gt;
&lt;br /&gt;
The magic number must be followed by 20 bytes of additional information, like UBL executable entry point, size of the UBL, start and load addresses, flags ... TI's [http://www.ti.com/lit/pdf/sprufg5 DM36x User's Guide ARM Subsystem] has all the details, chapter 11.2.5, page 188.&lt;br /&gt;
&lt;br /&gt;
After having found this piece of information, the RBL acts accordingly: loads the UBL into the ARM's on-chip TCM RAM0 and RAM1 (2x 16 KiB, at address space offset 0x0000 and 0x4000 respectively) and jumps to the specified entry point.&lt;br /&gt;
&lt;br /&gt;
=== User boot loader - UBL ===&lt;br /&gt;
&lt;br /&gt;
The ''user boot loader'' (UBL) used by the F454 is called ''BUBL'' and its source code can be found on [https://gitorious.org/ gitorious.org] in repository called [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9: medium_platform/bubl].&lt;br /&gt;
&lt;br /&gt;
As of this writing, the latest commit has the hash [https://gitorious.org/medium_platform/bubl/commit/90833fe26b0c5a833054e939909fc887c94561d9 90833fe] . Apparently this is exactly the version used in the F454, since this commit hash can be found in 2 places on the F454 - at runtime (!):&lt;br /&gt;
&lt;br /&gt;
* in the ARM TCM RAM0 and RAM1 (offset 0x5dd4): ''&amp;lt;BUBL 2011.0-rc1-g90833fe&amp;gt;''&lt;br /&gt;
* in the U-Boot environment on eMMC at absolute offset 0x5f000: ''baselineloader_version=BUBL 2011.0-rc1-g90833fe''&lt;br /&gt;
&lt;br /&gt;
This also gives an idea what the leading ''B'' could stands for - apparently ''baseline'' - whatever that means in this case ...&lt;br /&gt;
&lt;br /&gt;
BUBL completes the following [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L109 steps]:&lt;br /&gt;
&lt;br /&gt;
* setup PLL(s)&lt;br /&gt;
* setup timer(s)&lt;br /&gt;
* setup ADC&lt;br /&gt;
* setup DDR memory controller&lt;br /&gt;
* output (using UART0) various [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L44 pieces of information], determined via previously setup ADC (partially info the device bt_nexmed_hwmon.0 under Linux provides, too)&lt;br /&gt;
** board type (''BASI'')&lt;br /&gt;
** hardware version (''???'')&lt;br /&gt;
** boot device (''eMMC'')&lt;br /&gt;
** CPU frequency (''270'')&lt;br /&gt;
** RAM size (''??? MB'')&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
After these initial steps, BUBL [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L202 continues] with loading a binary blob from either NAND or eMMC into RAM. BUBL expects this binary blob to be a U-Boot binary.&lt;br /&gt;
&lt;br /&gt;
* if ADC value 4 says to boot from NAND (NOT the case on F454!)&lt;br /&gt;
** setup NAND interface&lt;br /&gt;
** read U-Boot from NAND (offset?, size?), into RAM at offset 0x81100000&lt;br /&gt;
* else&lt;br /&gt;
** setup MMC/SD interface&lt;br /&gt;
** read U-Boot from eMMC at offset 0x1000, size 256 KiB, into RAM at offset 0x81080000&lt;br /&gt;
&lt;br /&gt;
The binary blob loaded into RAM is checked for validity - if it is really a U-Boot binary (doubleword at offset 0x3c has to be 0xdeadbeef).&lt;br /&gt;
&lt;br /&gt;
If it is not U-Boot or if there is the character ''s'' received on UART0, BUBL discards any loaded binary blob and expects to [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L270 receive a S-record file] from UART0 instead. BUBL writes the received S-record file, translated to binary, into RAM at the offset determined from the S-record file.&lt;br /&gt;
&lt;br /&gt;
The last step is to either jump&lt;br /&gt;
&lt;br /&gt;
* to 0x81100000, in case of U-Boot from NAND  OR&lt;br /&gt;
* to 0x81080000, in case of U-Boot from eMMC  OR&lt;br /&gt;
* to the address determined from the receive S-record file.&lt;br /&gt;
&lt;br /&gt;
=== U-Boot ===&lt;br /&gt;
&lt;br /&gt;
The F454's user boot loader, BUBL, expects to load a U-Boot binary - via MMC/SD interface. It is expected to be 4 KiB into the F454's eMMC (offset 0x1000) and is assumed to be maximally 256 KiB in size.&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at the U-Boot environment (variable ''ver''), and also at the readable ASCII strings of the U-Boot binary, tells us what version of U-Boot is used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# fw_printenv | grep ^ver= | sed 's#^ver=##'&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
&lt;br /&gt;
root@basi:~# dd if=/dev/mmcblk0p1 bs=$((0xe00 + 0)) skip=1 count=$(((256 * 1024) / 0xe00)) 2&amp;gt;/dev/null | strings | grep -e 'U-Boot '&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
ubootver=U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
So it is obviously based on release candidate 2 for U-Boot 2010.12 . The Git commit hash, which follows ''-rc2-'' should tell us about the exact source code version.&lt;br /&gt;
&lt;br /&gt;
bticino published the source code on their [http://github.com/MyOpenCommunity MyOpenCommunity] site on [http://github.com GitHub]. It resides in a Git repository called http://github.com/MyOpenCommunity/u-boot-davinci-medium . As of this writing it's ''master'' branch of this repository is ahead by 3 newer commits. A link to the above mentioned commit hash is: [http://github.com/MyOpenCommunity/u-boot-davinci-medium/commit/3ed2d264ae41bbc05f961a8aececdd636cdb1582 3ed2d264ae41bbc05f961a8aececdd636cdb1582]. &lt;br /&gt;
&lt;br /&gt;
It turns out that this copy of U-Boot has been derived from:&lt;br /&gt;
&lt;br /&gt;
* arago-project.org [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=summary U-Boot for DaVinci], tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c DEV.DavinviBSP.03.01.01.38] (commit [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c 6ebeaa9])&lt;br /&gt;
* denx.de [http://www.denx.de/wiki/U-Boot/WebHome U-Boot], some commits after tag [http://git.denx.de/?p=u-boot.git;a=commit;h=d0d2271f8c62e830ec65fb069b6d12dd708e3e2f v2010.12-rc2] (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=f8689b f8689b])&lt;br /&gt;
&lt;br /&gt;
Note that arago-project.org does also have a tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=1af61f3b812b51f6f41ff37cd4a52ce6cfb21d7a DEV.DavinviBSP.03.01.01.39], which is currently equivalent to where the branch ''r39'' points to. And more interesting: this tag is just one single commit further than where tag DEV.DavinviBSP.03.01.01.38 points to.&lt;br /&gt;
&lt;br /&gt;
To avoid confusion: The [http://github.com/MyOpenCommunity MyOpenCommunity] also has a repository called [http://github.com/MyOpenCommunity/u-boot-davinci-medium-v2 u-boot-davinci-medium-v2]. This is newer version, based on denx.de's U-Boot (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=d41b3cc16fd97da23900f79e8fefdeedeebde8f6 d41b3cc]) - somewhere between versions [http://git.denx.de/?p=u-boot.git;a=commit;h=ebbf0d20aa85f623c49b7ed3349ebfea450c152d v2013.01-rc2] and [http://git.denx.de/?p=u-boot.git;a=commit;h=3ae7b240ad8c723d02aa79654220a07049b7ae4d v2013.01-rc1]. So later shipped F454 devices ''might'' have a U-Boot binary installed which is based on this newer source code base.&lt;br /&gt;
&lt;br /&gt;
==== Operation ====&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/version and /boot, while running F454 firmware version 1.00.37, suggest:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/version &lt;br /&gt;
Linux version 2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429 (bticino@medium1) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #1 PREEMPT Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
root@basi:~# ls -l /boot/&lt;br /&gt;
lrwxrwxrwx    1 root     root           66 Nov  8  2012 uImage -&amp;gt; uImage-2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the used [http://kernel.org Linux] kernel is apparently based on [http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tag/?h=linux-2.6.32.y&amp;amp;id=v2.6.32.17 version 2.6.32.17] within Git repository http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git .&lt;br /&gt;
&lt;br /&gt;
Furthermore, when we look at the kernel image file, called ''uImage'', which get's loaded by U-Boot on startup:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ unzip Firmware_F454_vers010037.zip&lt;br /&gt;
Archive:  Firmware_F454_vers010037.zip&lt;br /&gt;
  inflating: F454_010037.fwz&lt;br /&gt;
$ unzip -P F454  F454_010037.fwz&lt;br /&gt;
Archive:  F454_010037.fwz&lt;br /&gt;
  inflating: btweb_only.ext3.gz      &lt;br /&gt;
  inflating: btweb_only_recovery.ext3.gz  &lt;br /&gt;
  inflating: fwz.xml                 &lt;br /&gt;
  inflating: uImage&lt;br /&gt;
$ mkimage -l uImage &lt;br /&gt;
Image Name:   Arago/2.6.32.17-psp03.01.01.39/b&lt;br /&gt;
Created:      Thu Nov  8 17:02:33 2012&lt;br /&gt;
Image Type:   ARM Linux Kernel Image (uncompressed)&lt;br /&gt;
Data Size:    1720032 Bytes = 1679.72 kB = 1.64 MB&lt;br /&gt;
Load Address: 80008000&lt;br /&gt;
Entry Point:  80008000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We recognize 2 important hints within the ''Image Name'' of the uImage: ''Arago'' and the version amendment ''psp03.01.01.39''. Together with the amendment ''-davinci1'' seen within /proc/version, these 2 hints make a very strong suggestion that the used Linux kernel version is based on one managed by TI as part the [http://arago-project.org/ Arago project]: tag [http://arago-project.org/git/projects/?p=linux-davinci.git;a=commit;h=161e942bbb6e3603bccd1548865cfcce0910f1cc DEV.DaVinciPSP.03.01.01.39] within Git repository git://arago-project.org/git/projects/linux-davinci.git .&lt;br /&gt;
&lt;br /&gt;
All these assumption about on what version the used kernel is based on become certain facts after finding one of bticino's public Git repositories on [http://github.com GitHub]: http://github.com/MyOpenCommunity/linux-davinci-medium . It comprises the commit with the hash [http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429], which occurs in /proc/version as an amendment to the kernel version.&lt;br /&gt;
&lt;br /&gt;
Newer versions of the firmware apparently use slightly newer kernel versions/commits, which can also be found in the mentioned [http://github.com/MyOpenCommunity/linux-davinci-medium repository]. Commits of firmware version 1.00.xx kernels are part of a branch called [https://github.com/MyOpenCommunity/linux-davinci-medium/tree/f454_1 f454_1]. Commits of firmware version 2.00.xx kernels can be found on the [https://github.com/MyOpenCommunity/linux-davinci-medium/tree/basi basi] branch.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| compile stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| kernel version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| commit hash&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:16:09 CET 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/59f7438a4e85d0a2b1b985a65500a9f05366f6ce 59f7438a4e85d0a2b1b985a65500a9f05366f6ce]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep 4 18:03:59 CEST 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/f56c4d42a889cb71bd92d101e9e2b0e847ca1603 f56c4d42a889cb71bd92d101e9e2b0e847ca1603]&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.46&lt;br /&gt;
|Wed Oct 28 10:51:58 CET 2015&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/c44221b9cd7e82d5ec494320685310d138f4dd07 c44221b9cd7e82d5ec494320685310d138f4dd07]&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.48&lt;br /&gt;
|Thu Jan 7 18:34:50 CET 2016&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/c44221b9cd7e82d5ec494320685310d138f4dd07 c44221b9cd7e82d5ec494320685310d138f4dd07]&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.50&lt;br /&gt;
|Thu Feb 11 10:07:14 CET 2016&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/c44221b9cd7e82d5ec494320685310d138f4dd07 c44221b9cd7e82d5ec494320685310d138f4dd07]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
Apparently all kernels include the set of configuration options used to compile them (CONFIG_IKCONFIG=y), because all kernel files have embedded gzip data blobs. To extract such a configuration file from a uImage like the ones found in firmware updates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# extract kernel image, (pure binary, arch/arm/boot/Image)&lt;br /&gt;
$ ZIO=$(binwalk uImage | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }'); \&lt;br /&gt;
	dd if=uImage bs=$ZIO skip=1 | gunzip &amp;gt;Image&lt;br /&gt;
# extract embedded config file&lt;br /&gt;
$ CGZO=$(binwalk Image | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }');&lt;br /&gt;
	dd if=Image bs=$CGZO skip=1 | gunzip &amp;gt;config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It turns out that all four different firmware v1.00.xx kernel versions known so far do have exactly the same configuration. The configuration of the firmware v2.00.xx kernel versions are different from the v1.00.xx ones. However within the v2.00.xx ones it is again the same configuration. The only differences within one family, say between v1.00.xx and v1.00.yy is the typical timestamp which is placed at the beginning of Linux kernel configuration files.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| time stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| md5sum&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:15:22 2014&lt;br /&gt;
|6973e72623f206073f9359035d076ae8&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep  4 18:03:13 2014&lt;br /&gt;
|3e3aaf37a4158eeb1e92417aa51bc16b&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.46&lt;br /&gt;
|Wed Oct 28 10:49:54 2015&lt;br /&gt;
|20b4d997b4a307cb01d2a156f7551179&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.48&lt;br /&gt;
|Thu Jan  7 18:33:28 2016&lt;br /&gt;
|eea14c82b90beb0bb3ba4ba2ccdb91d8&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.50&lt;br /&gt;
|Thu Feb 11 10:05:41 2016&lt;br /&gt;
|0725aaa72d3d58dd0c89e4d4ee5a5458&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following list shows some of the enabled features of both, v1.00.xx and v2.00.xx kernels '''''besides the expected ones''''' (support for the Davinci SoC and it's peripherals). Features, which might be surprising to see and/or which are most likely not really used by the current firmware:&lt;br /&gt;
&lt;br /&gt;
* core&lt;br /&gt;
**  Tickless System&lt;br /&gt;
**  Suspend to RAM and standby&lt;br /&gt;
* network&lt;br /&gt;
**  IPv4&lt;br /&gt;
***  in-kernel DHCP support&lt;br /&gt;
***  IPsec: transport, tunnel and BEET mode&lt;br /&gt;
**  IPv6 (module)&lt;br /&gt;
* drivers&lt;br /&gt;
**  loopback device (module)&lt;br /&gt;
**  TUN/TAP device (module)&lt;br /&gt;
**  PPP with async/sync serial support and deflate compression (modules)&lt;br /&gt;
**  network console logging&lt;br /&gt;
* filesystems&lt;br /&gt;
**  Dnotify and Inotify support&lt;br /&gt;
**  Kernel automounter v4 (module)&lt;br /&gt;
**  FAT&lt;br /&gt;
**  NFS v2 and v3&lt;br /&gt;
**  NFS v2 and v3 server (module)&lt;br /&gt;
**  SMB  (module)&lt;br /&gt;
&lt;br /&gt;
The firmware v2.00.xx kernels do have additional features enabled. Again the list shows just the ones which might be surprising to see.&lt;br /&gt;
&lt;br /&gt;
* network&lt;br /&gt;
** bridge (module)&lt;br /&gt;
*** stp (module)&lt;br /&gt;
*** netfilter, ebtables including DNAT, SNAT (modules)&lt;br /&gt;
** IPv4&lt;br /&gt;
*** netfilter, iptables including connection tracking, NAT, MASQ, STATE, ... (modules)&lt;br /&gt;
** IPv6&lt;br /&gt;
*** netfilter, iptables including connection tracking, STATE, ... (modules)&lt;br /&gt;
* filesystems&lt;br /&gt;
** devtmpfs&lt;br /&gt;
&lt;br /&gt;
On an F454 running firmware version v1.00.37, the following modules are loaded:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# lsmod&lt;br /&gt;
Module                  Size  Used by&lt;br /&gt;
ipv6                  247137  16 &lt;br /&gt;
g_ether                27235  0 &lt;br /&gt;
musb_hdrc              28058  1 g_ether&lt;br /&gt;
dm365mmap               1955  0 &lt;br /&gt;
edmak                  12651  0 &lt;br /&gt;
irqk                    6411  0 &lt;br /&gt;
cmemk                  22327  0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of the above listed features, which are build as modules, just kernel level support for IPv6 is actually loaded. All other loaded modules are peripheral drivers.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=489</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=489"/>
		<updated>2016-10-03T15:16:20Z</updated>

		<summary type="html">&lt;p&gt;Joft: Add info about firmware version 2.00.xx kernels.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Serial interfaces ==&lt;br /&gt;
&lt;br /&gt;
The DM365 SoC includes two on-chip UARTs [http://www.ti.com/lit/ug/sprufh2/sprufh2.pdf], which are both more or less 8250/16550A compatible ones. For the F454 bticino added a third, external UART, also 8250/16550A compatible, which is apparently attached to the [http://www.ti.com/lit/ug/sprufi1c/sprufi1c.pdf Asynchronous External Memory Interface] of the DM365.&lt;br /&gt;
&lt;br /&gt;
Within Linux they are represented by ''ttySx'' character device nodes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# ls -l /dev/ttyS*&lt;br /&gt;
crw-r-----    1 root     root       4,  64 Feb 21 16:35 /dev/ttyS0&lt;br /&gt;
crw-r-----    1 root     root       4,  65 Feb 22 10:55 /dev/ttyS1&lt;br /&gt;
crw-r-----    1 root     root       4,  66 Feb 22 10:55 /dev/ttyS2&lt;br /&gt;
crw-r-----    1 root     root     204,   5 Nov  8  2012 /dev/ttySA0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Note that the device node ''ttySA0'' (major 204, minor 5) does not really exist. It seems to be a leftover and is not needed/used.&lt;br /&gt;
&lt;br /&gt;
The following table shows how these UARTs are used:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| UART&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Linux device node&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| settings&lt;br /&gt;
|-&lt;br /&gt;
|DM365 UART0&lt;br /&gt;
|/dev/ttyS0&lt;br /&gt;
|BUBL, U-Boot and Linux system console&lt;br /&gt;
|115200 baud / no parity / 8 data bits / 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
|DM365 UART1&lt;br /&gt;
|/dev/ttyS1&lt;br /&gt;
|''SCS AV'' bus communication via a PIC microcontroller&lt;br /&gt;
|38400 baud / no parity / 8 data bits / 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
|external UART&lt;br /&gt;
|/dev/ttyS2&lt;br /&gt;
|''SCS AI'' bus communication via a (second) PIC microcontroller&lt;br /&gt;
|38400 baud / no parity / 8 data bits / 1 stop bit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The settings can be verified by, for example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# stty -a -F /dev/ttyS1&lt;br /&gt;
speed 38400 baud; rows 24; columns 80;&lt;br /&gt;
intr = &amp;lt;undef&amp;gt;; quit = &amp;lt;undef&amp;gt;; erase = &amp;lt;undef&amp;gt;; kill = &amp;lt;undef&amp;gt;; eof = ^D; eol = &amp;lt;undef&amp;gt;; eol2 = &amp;lt;undef&amp;gt;; start = &amp;lt;undef&amp;gt;; stop = &amp;lt;undef&amp;gt;;&lt;br /&gt;
susp = &amp;lt;undef&amp;gt;; rprnt = &amp;lt;undef&amp;gt;; werase = &amp;lt;undef&amp;gt;; lnext = &amp;lt;undef&amp;gt;; flush = &amp;lt;undef&amp;gt;; min = 1; time = 0;&lt;br /&gt;
-parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts&lt;br /&gt;
-ignbrk -brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon ixoff -iuclc -ixany -imaxbel&lt;br /&gt;
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0&lt;br /&gt;
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Accessibility ===&lt;br /&gt;
&lt;br /&gt;
Bticino's F454 [http://www.homesystems-legrandgroup.com/technicalDocuments/type5/MQ00519-b-EN.pdf Technial Sheet] documents there is a ''Serial connector RS232'' behind the hatch of the F454's case, left of the 3 LEDs. &lt;br /&gt;
&lt;br /&gt;
It is a 5 pin male connector of an, at least to your author, unknown type ''(TODO)''. In general it seems more than likely that this connector is going to UART0, the system console. However it remains unclear, which pins are what (3 needed at least: GND, TX, RX) and what the voltage levels are ''(TODO)''. Of course, the designation ''RS232'' is a pretty clear statement and suggests that the PCB includes a MAX232 or similar and thus it could be directly connected to a PCs serial port/USB-to-serial.&lt;br /&gt;
&lt;br /&gt;
''TODO: try it out, determine pins''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
For its DaVinci SoCs, to compile Linux kernels, TI recommends [http://processors.wiki.ti.com/index.php/DaVinci_GIT_Linux_Kernel#Overview] CodeSourcery's ''GNU Toolchain for ARM Processors'', version ''2009q1-203'', which can be downloaded as a [http://www.codesourcery.com/sgpp/lite/arm/portal/package4573/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 tar archive] (or a [http://www.codesourcery.com/sgpp/lite/arm/portal/package4573/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi.bin self-extracting archive], ''bigger not recommended'').&lt;br /&gt;
&lt;br /&gt;
TI's [http://arago-project.org Arago Project] also refers to that specific tool chain version [http://arago-project.org/wiki/index.php/Getting_CodeSourcery_Toolchain] - to be used not only for kernel, but to compile everything - from bootloader to userspace applications.&lt;br /&gt;
&lt;br /&gt;
This tool chain can also be found, pre-installed, in bticino's [http://www.myopen-legrandgroup.com/devices/gateways/m/f454_-_003598/45317.aspx F454/003598 SDK]. The SDK is a Ubuntu 12.04 Live DVD, with some non-standard programs like this tool chain pre-installed.&lt;br /&gt;
&lt;br /&gt;
== Boot loader ==&lt;br /&gt;
&lt;br /&gt;
=== ARM ROM boot loader - RBL ===&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM processor starts with executing the ARM ''ROM boot loader'' (RBL), which resides in an on-chip ROM mapped to 0x08000 / 0x18000 (Instruction/Data; size: 16KiB). The RBL searches for a ''user boot loader'' (UBL). In case of the F454 the current assumption is that it does so via DM365's SPI0 interface - on an attached SPI EEPROM.&lt;br /&gt;
&lt;br /&gt;
The RBL expects to find a certain ''magic number'' in the first 32 bit of the EEPROM. This number has be either ''0xa1aced00'' (24 bit addressing) or ''0xa1aced01'' (16 bit addressing).&lt;br /&gt;
&lt;br /&gt;
The magic number must be followed by 20 bytes of additional information, like UBL executable entry point, size of the UBL, start and load addresses, flags ... TI's [http://www.ti.com/lit/pdf/sprufg5 DM36x User's Guide ARM Subsystem] has all the details, chapter 11.2.5, page 188.&lt;br /&gt;
&lt;br /&gt;
After having found this piece of information, the RBL acts accordingly: loads the UBL into the ARM's on-chip TCM RAM0 and RAM1 (2x 16 KiB, at address space offset 0x0000 and 0x4000 respectively) and jumps to the specified entry point.&lt;br /&gt;
&lt;br /&gt;
=== User boot loader - UBL ===&lt;br /&gt;
&lt;br /&gt;
The ''user boot loader'' (UBL) used by the F454 is called ''BUBL'' and its source code can be found on [https://gitorious.org/ gitorious.org] in repository called [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9: medium_platform/bubl].&lt;br /&gt;
&lt;br /&gt;
As of this writing, the latest commit has the hash [https://gitorious.org/medium_platform/bubl/commit/90833fe26b0c5a833054e939909fc887c94561d9 90833fe] . Apparently this is exactly the version used in the F454, since this commit hash can be found in 2 places on the F454 - at runtime (!):&lt;br /&gt;
&lt;br /&gt;
* in the ARM TCM RAM0 and RAM1 (offset 0x5dd4): ''&amp;lt;BUBL 2011.0-rc1-g90833fe&amp;gt;''&lt;br /&gt;
* in the U-Boot environment on eMMC at absolute offset 0x5f000: ''baselineloader_version=BUBL 2011.0-rc1-g90833fe''&lt;br /&gt;
&lt;br /&gt;
This also gives an idea what the leading ''B'' could stands for - apparently ''baseline'' - whatever that means in this case ...&lt;br /&gt;
&lt;br /&gt;
BUBL completes the following [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L109 steps]:&lt;br /&gt;
&lt;br /&gt;
* setup PLL(s)&lt;br /&gt;
* setup timer(s)&lt;br /&gt;
* setup ADC&lt;br /&gt;
* setup DDR memory controller&lt;br /&gt;
* output (using UART0) various [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L44 pieces of information], determined via previously setup ADC (partially info the device bt_nexmed_hwmon.0 under Linux provides, too)&lt;br /&gt;
** board type (''BASI'')&lt;br /&gt;
** hardware version (''???'')&lt;br /&gt;
** boot device (''eMMC'')&lt;br /&gt;
** CPU frequency (''270'')&lt;br /&gt;
** RAM size (''??? MB'')&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
After these initial steps, BUBL [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L202 continues] with loading a binary blob from either NAND or eMMC into RAM. BUBL expects this binary blob to be a U-Boot binary.&lt;br /&gt;
&lt;br /&gt;
* if ADC value 4 says to boot from NAND (NOT the case on F454!)&lt;br /&gt;
** setup NAND interface&lt;br /&gt;
** read U-Boot from NAND (offset?, size?), into RAM at offset 0x81100000&lt;br /&gt;
* else&lt;br /&gt;
** setup MMC/SD interface&lt;br /&gt;
** read U-Boot from eMMC at offset 0x1000, size 256 KiB, into RAM at offset 0x81080000&lt;br /&gt;
&lt;br /&gt;
The binary blob loaded into RAM is checked for validity - if it is really a U-Boot binary (doubleword at offset 0x3c has to be 0xdeadbeef).&lt;br /&gt;
&lt;br /&gt;
If it is not U-Boot or if there is the character ''s'' received on UART0, BUBL discards any loaded binary blob and expects to [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L270 receive a S-record file] from UART0 instead. BUBL writes the received S-record file, translated to binary, into RAM at the offset determined from the S-record file.&lt;br /&gt;
&lt;br /&gt;
The last step is to either jump&lt;br /&gt;
&lt;br /&gt;
* to 0x81100000, in case of U-Boot from NAND  OR&lt;br /&gt;
* to 0x81080000, in case of U-Boot from eMMC  OR&lt;br /&gt;
* to the address determined from the receive S-record file.&lt;br /&gt;
&lt;br /&gt;
=== U-Boot ===&lt;br /&gt;
&lt;br /&gt;
The F454's user boot loader, BUBL, expects to load a U-Boot binary - via MMC/SD interface. It is expected to be 4 KiB into the F454's eMMC (offset 0x1000) and is assumed to be maximally 256 KiB in size.&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at the U-Boot environment (variable ''ver''), and also at the readable ASCII strings of the U-Boot binary, tells us what version of U-Boot is used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# fw_printenv | grep ^ver= | sed 's#^ver=##'&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
&lt;br /&gt;
root@basi:~# dd if=/dev/mmcblk0p1 bs=$((0xe00 + 0)) skip=1 count=$(((256 * 1024) / 0xe00)) 2&amp;gt;/dev/null | strings | grep -e 'U-Boot '&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
ubootver=U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
So it is obviously based on release candidate 2 for U-Boot 2010.12 . The Git commit hash, which follows ''-rc2-'' should tell us about the exact source code version.&lt;br /&gt;
&lt;br /&gt;
bticino published the source code on their [http://github.com/MyOpenCommunity MyOpenCommunity] site on [http://github.com GitHub]. It resides in a Git repository called http://github.com/MyOpenCommunity/u-boot-davinci-medium . As of this writing it's ''master'' branch of this repository is ahead by 3 newer commits. A link to the above mentioned commit hash is: [http://github.com/MyOpenCommunity/u-boot-davinci-medium/commit/3ed2d264ae41bbc05f961a8aececdd636cdb1582 3ed2d264ae41bbc05f961a8aececdd636cdb1582]. &lt;br /&gt;
&lt;br /&gt;
It turns out that this copy of U-Boot has been derived from:&lt;br /&gt;
&lt;br /&gt;
* arago-project.org [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=summary U-Boot for DaVinci], tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c DEV.DavinviBSP.03.01.01.38] (commit [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c 6ebeaa9])&lt;br /&gt;
* denx.de [http://www.denx.de/wiki/U-Boot/WebHome U-Boot], some commits after tag [http://git.denx.de/?p=u-boot.git;a=commit;h=d0d2271f8c62e830ec65fb069b6d12dd708e3e2f v2010.12-rc2] (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=f8689b f8689b])&lt;br /&gt;
&lt;br /&gt;
Note that arago-project.org does also have a tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=1af61f3b812b51f6f41ff37cd4a52ce6cfb21d7a DEV.DavinviBSP.03.01.01.39], which is currently equivalent to where the branch ''r39'' points to. And more interesting: this tag is just one single commit further than where tag DEV.DavinviBSP.03.01.01.38 points to.&lt;br /&gt;
&lt;br /&gt;
To avoid confusion: The [http://github.com/MyOpenCommunity MyOpenCommunity] also has a repository called [http://github.com/MyOpenCommunity/u-boot-davinci-medium-v2 u-boot-davinci-medium-v2]. This is newer version, based on denx.de's U-Boot (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=d41b3cc16fd97da23900f79e8fefdeedeebde8f6 d41b3cc]) - somewhere between versions [http://git.denx.de/?p=u-boot.git;a=commit;h=ebbf0d20aa85f623c49b7ed3349ebfea450c152d v2013.01-rc2] and [http://git.denx.de/?p=u-boot.git;a=commit;h=3ae7b240ad8c723d02aa79654220a07049b7ae4d v2013.01-rc1]. So later shipped F454 devices ''might'' have a U-Boot binary installed which is based on this newer source code base.&lt;br /&gt;
&lt;br /&gt;
==== Operation ====&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/version and /boot, while running F454 firmware version 1.00.37, suggest:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/version &lt;br /&gt;
Linux version 2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429 (bticino@medium1) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #1 PREEMPT Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
root@basi:~# ls -l /boot/&lt;br /&gt;
lrwxrwxrwx    1 root     root           66 Nov  8  2012 uImage -&amp;gt; uImage-2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the used [http://kernel.org Linux] kernel is apparently based on [http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tag/?h=linux-2.6.32.y&amp;amp;id=v2.6.32.17 version 2.6.32.17] within Git repository http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git .&lt;br /&gt;
&lt;br /&gt;
Furthermore, when we look at the kernel image file, called ''uImage'', which get's loaded by U-Boot on startup:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ unzip Firmware_F454_vers010037.zip&lt;br /&gt;
Archive:  Firmware_F454_vers010037.zip&lt;br /&gt;
  inflating: F454_010037.fwz&lt;br /&gt;
$ unzip -P F454  F454_010037.fwz&lt;br /&gt;
Archive:  F454_010037.fwz&lt;br /&gt;
  inflating: btweb_only.ext3.gz      &lt;br /&gt;
  inflating: btweb_only_recovery.ext3.gz  &lt;br /&gt;
  inflating: fwz.xml                 &lt;br /&gt;
  inflating: uImage&lt;br /&gt;
$ mkimage -l uImage &lt;br /&gt;
Image Name:   Arago/2.6.32.17-psp03.01.01.39/b&lt;br /&gt;
Created:      Thu Nov  8 17:02:33 2012&lt;br /&gt;
Image Type:   ARM Linux Kernel Image (uncompressed)&lt;br /&gt;
Data Size:    1720032 Bytes = 1679.72 kB = 1.64 MB&lt;br /&gt;
Load Address: 80008000&lt;br /&gt;
Entry Point:  80008000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We recognize 2 important hints within the ''Image Name'' of the uImage: ''Arago'' and the version amendment ''psp03.01.01.39''. Together with the amendment ''-davinci1'' seen within /proc/version, these 2 hints make a very strong suggestion that the used Linux kernel version is based on one managed by TI as part the [http://arago-project.org/ Arago project]: tag [http://arago-project.org/git/projects/?p=linux-davinci.git;a=commit;h=161e942bbb6e3603bccd1548865cfcce0910f1cc DEV.DaVinciPSP.03.01.01.39] within Git repository git://arago-project.org/git/projects/linux-davinci.git .&lt;br /&gt;
&lt;br /&gt;
All these assumption about on what version the used kernel is based on become certain facts after finding one of bticino's public Git repositories on [http://github.com GitHub]: http://github.com/MyOpenCommunity/linux-davinci-medium . It comprises the commit with the hash [http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429], which occurs in /proc/version as an amendment to the kernel version.&lt;br /&gt;
&lt;br /&gt;
Newer versions of the firmware apparently use slightly newer kernel versions/commits, which can also be found in the mentioned [http://github.com/MyOpenCommunity/linux-davinci-medium repository]. Commits of firmware version 1.00.xx kernels are part of a branch called [https://github.com/MyOpenCommunity/linux-davinci-medium/tree/f454_1 f454_1]. Commits of firmware version 2.00.xx kernels can be found on the [https://github.com/MyOpenCommunity/linux-davinci-medium/tree/basi basi] branch.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| compile stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| kernel version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| commit hash&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:16:09 CET 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/59f7438a4e85d0a2b1b985a65500a9f05366f6ce 59f7438a4e85d0a2b1b985a65500a9f05366f6ce]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep 4 18:03:59 CEST 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/f56c4d42a889cb71bd92d101e9e2b0e847ca1603 f56c4d42a889cb71bd92d101e9e2b0e847ca1603]&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.46&lt;br /&gt;
|Wed Oct 28 10:51:58 CET 2015&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/c44221b9cd7e82d5ec494320685310d138f4dd07 c44221b9cd7e82d5ec494320685310d138f4dd07]&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.48&lt;br /&gt;
|Thu Jan 7 18:34:50 CET 2016&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/c44221b9cd7e82d5ec494320685310d138f4dd07 c44221b9cd7e82d5ec494320685310d138f4dd07]&lt;br /&gt;
|-&lt;br /&gt;
|v2.00.50&lt;br /&gt;
|Thu Feb 11 10:07:14 CET 2016&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/c44221b9cd7e82d5ec494320685310d138f4dd07 c44221b9cd7e82d5ec494320685310d138f4dd07]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
Apparently all kernels include the set of configuration options used to compile them (CONFIG_IKCONFIG=y), because all kernel files have embedded gzip data blobs. To extract such a configuration file from a uImage like the ones found in firmware updates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# extract kernel image, (pure binary, arch/arm/boot/Image)&lt;br /&gt;
$ ZIO=$(binwalk uImage | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }'); \&lt;br /&gt;
	dd if=uImage bs=$ZIO skip=1 | gunzip &amp;gt;Image&lt;br /&gt;
# extract embedded config file&lt;br /&gt;
$ CGZO=$(binwalk Image | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }');&lt;br /&gt;
	dd if=Image bs=$CGZO skip=1 | gunzip &amp;gt;config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It turns out that all three different versions known so far do have exactly the same configuration. The only differences is the typical timestamp which is placed at the beginning of Linux kernel configuration files.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| time stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| md5sum&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:15:22 2014&lt;br /&gt;
|6973e72623f206073f9359035d076ae8&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep  4 18:03:13 2014&lt;br /&gt;
|3e3aaf37a4158eeb1e92417aa51bc16b&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following list shows some of the enabled features - '''''besides the expected ones''''' (support for the Davinci SoC and it's peripherals). Features, which might be surprising to see and/or which are most likely not really used by the current firmware:&lt;br /&gt;
&lt;br /&gt;
* core&lt;br /&gt;
**  Tickless System&lt;br /&gt;
**  Suspend to RAM and standby&lt;br /&gt;
* network&lt;br /&gt;
**  IPv4&lt;br /&gt;
***  in-kernel DHCP support&lt;br /&gt;
***  IPsec: transport, tunnel and BEET mode&lt;br /&gt;
**  IPv6 (module)&lt;br /&gt;
* drivers&lt;br /&gt;
**  loopback device (module)&lt;br /&gt;
**  TUN/TAP device (module)&lt;br /&gt;
**  PPP with async/sync serial support and deflate compression (modules)&lt;br /&gt;
**  network console logging&lt;br /&gt;
* filesystems&lt;br /&gt;
**  Dnotify and Inotify support&lt;br /&gt;
**  Kernel automounter v4 (module)&lt;br /&gt;
**  FAT&lt;br /&gt;
**  NFS v2 and v3&lt;br /&gt;
**  NFS v2 and v3 server (module)&lt;br /&gt;
**  SMB  (module)&lt;br /&gt;
&lt;br /&gt;
On an F454 running firmware version v1.00.37, the following modules are loaded:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# lsmod&lt;br /&gt;
Module                  Size  Used by&lt;br /&gt;
ipv6                  247137  16 &lt;br /&gt;
g_ether                27235  0 &lt;br /&gt;
musb_hdrc              28058  1 g_ether&lt;br /&gt;
dm365mmap               1955  0 &lt;br /&gt;
edmak                  12651  0 &lt;br /&gt;
irqk                    6411  0 &lt;br /&gt;
cmemk                  22327  0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of the above listed features, which are build as modules, just kernel level support for IPv6 is actually loaded. All other loaded modules are peripheral drivers.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=358</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=358"/>
		<updated>2015-03-12T08:32:12Z</updated>

		<summary type="html">&lt;p&gt;Joft: /* Boot loader */ RBL, fix ambiguity in various statements.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Serial interfaces ==&lt;br /&gt;
&lt;br /&gt;
The DM365 SoC includes two on-chip UARTs [http://www.ti.com/lit/ug/sprufh2/sprufh2.pdf], which are both more or less 8250/16550A compatible ones. For the F454 bticino added a third, external UART, also 8250/16550A compatible, which is apparently attached to the [http://www.ti.com/lit/ug/sprufi1c/sprufi1c.pdf Asynchronous External Memory Interface] of the DM365.&lt;br /&gt;
&lt;br /&gt;
Within Linux they are represented by ''ttySx'' character device nodes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# ls -l /dev/ttyS*&lt;br /&gt;
crw-r-----    1 root     root       4,  64 Feb 21 16:35 /dev/ttyS0&lt;br /&gt;
crw-r-----    1 root     root       4,  65 Feb 22 10:55 /dev/ttyS1&lt;br /&gt;
crw-r-----    1 root     root       4,  66 Feb 22 10:55 /dev/ttyS2&lt;br /&gt;
crw-r-----    1 root     root     204,   5 Nov  8  2012 /dev/ttySA0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Note that the device node ''ttySA0'' (major 204, minor 5) does not really exist. It seems to be a leftover and is not needed/used.&lt;br /&gt;
&lt;br /&gt;
The following table shows how these UARTs are used:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| UART&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Linux device node&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| settings&lt;br /&gt;
|-&lt;br /&gt;
|DM365 UART0&lt;br /&gt;
|/dev/ttyS0&lt;br /&gt;
|BUBL, U-Boot and Linux system console&lt;br /&gt;
|115200 baud / no parity / 8 data bits / 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
|DM365 UART1&lt;br /&gt;
|/dev/ttyS1&lt;br /&gt;
|''SCS AV'' bus communication via a PIC microcontroller&lt;br /&gt;
|38400 baud / no parity / 8 data bits / 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
|external UART&lt;br /&gt;
|/dev/ttyS2&lt;br /&gt;
|''SCS AI'' bus communication via a (second) PIC microcontroller&lt;br /&gt;
|38400 baud / no parity / 8 data bits / 1 stop bit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The settings can be verified by, for example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# stty -a -F /dev/ttyS1&lt;br /&gt;
speed 38400 baud; rows 24; columns 80;&lt;br /&gt;
intr = &amp;lt;undef&amp;gt;; quit = &amp;lt;undef&amp;gt;; erase = &amp;lt;undef&amp;gt;; kill = &amp;lt;undef&amp;gt;; eof = ^D; eol = &amp;lt;undef&amp;gt;; eol2 = &amp;lt;undef&amp;gt;; start = &amp;lt;undef&amp;gt;; stop = &amp;lt;undef&amp;gt;;&lt;br /&gt;
susp = &amp;lt;undef&amp;gt;; rprnt = &amp;lt;undef&amp;gt;; werase = &amp;lt;undef&amp;gt;; lnext = &amp;lt;undef&amp;gt;; flush = &amp;lt;undef&amp;gt;; min = 1; time = 0;&lt;br /&gt;
-parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts&lt;br /&gt;
-ignbrk -brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon ixoff -iuclc -ixany -imaxbel&lt;br /&gt;
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0&lt;br /&gt;
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Accessibility ===&lt;br /&gt;
&lt;br /&gt;
Bticino's F454 [http://www.homesystems-legrandgroup.com/technicalDocuments/type5/MQ00519-b-EN.pdf Technial Sheet] documents there is a ''Serial connector RS232'' behind the hatch of the F454's case, left of the 3 LEDs. &lt;br /&gt;
&lt;br /&gt;
It is a 5 pin male connector of an, at least to your author, unknown type ''(TODO)''. In general it seems more than likely that this connector is going to UART0, the system console. However it remains unclear, which pins are what (3 needed at least: GND, TX, RX) and what the voltage levels are ''(TODO)''. Of course, the designation ''RS232'' is a pretty clear statement and suggests that the PCB includes a MAX232 or similar and thus it could be directly connected to a PCs serial port/USB-to-serial.&lt;br /&gt;
&lt;br /&gt;
''TODO: try it out, determine pins''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
For its DaVinci SoCs, to compile Linux kernels, TI recommends [http://processors.wiki.ti.com/index.php/DaVinci_GIT_Linux_Kernel#Overview] CodeSourcery's ''GNU Toolchain for ARM Processors'', version ''2009q1-203'', which can be downloaded as a [http://www.codesourcery.com/sgpp/lite/arm/portal/package4573/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 tar archive] (or a [http://www.codesourcery.com/sgpp/lite/arm/portal/package4573/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi.bin self-extracting archive], ''bigger not recommended'').&lt;br /&gt;
&lt;br /&gt;
TI's [http://arago-project.org Arago Project] also refers to that specific tool chain version [http://arago-project.org/wiki/index.php/Getting_CodeSourcery_Toolchain] - to be used not only for kernel, but to compile everything - from bootloader to userspace applications.&lt;br /&gt;
&lt;br /&gt;
This tool chain can also be found, pre-installed, in bticino's [http://www.myopen-legrandgroup.com/devices/gateways/m/f454_-_003598/45317.aspx F454/003598 SDK]. The SDK is a Ubuntu 12.04 Live DVD, with some non-standard programs like this tool chain pre-installed.&lt;br /&gt;
&lt;br /&gt;
== Boot loader ==&lt;br /&gt;
&lt;br /&gt;
=== ARM ROM boot loader - RBL ===&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM processor starts with executing the ARM ''ROM boot loader'' (RBL), which resides in an on-chip ROM mapped to 0x08000 / 0x18000 (Instruction/Data; size: 16KiB). The RBL searches for a ''user boot loader'' (UBL). In case of the F454 the current assumption is that it does so via DM365's SPI0 interface - on an attached SPI EEPROM.&lt;br /&gt;
&lt;br /&gt;
The RBL expects to find a certain ''magic number'' in the first 32 bit of the EEPROM. This number has be either ''0xa1aced00'' (24 bit addressing) or ''0xa1aced01'' (16 bit addressing).&lt;br /&gt;
&lt;br /&gt;
The magic number must be followed by 20 bytes of additional information, like UBL executable entry point, size of the UBL, start and load addresses, flags ... TI's [http://www.ti.com/lit/pdf/sprufg5 DM36x User's Guide ARM Subsystem] has all the details, chapter 11.2.5, page 188.&lt;br /&gt;
&lt;br /&gt;
After having found this piece of information, the RBL acts accordingly: loads the UBL into the ARM's on-chip TCM RAM0 and RAM1 (2x 16 KiB, at address space offset 0x0000 and 0x4000 respectively) and jumps to the specified entry point.&lt;br /&gt;
&lt;br /&gt;
=== User boot loader - UBL ===&lt;br /&gt;
&lt;br /&gt;
The ''user boot loader'' (UBL) used by the F454 is called ''BUBL'' and its source code can be found on [https://gitorious.org/ gitorious.org] in repository called [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9: medium_platform/bubl].&lt;br /&gt;
&lt;br /&gt;
As of this writing, the latest commit has the hash [https://gitorious.org/medium_platform/bubl/commit/90833fe26b0c5a833054e939909fc887c94561d9 90833fe] . Apparently this is exactly the version used in the F454, since this commit hash can be found in 2 places on the F454 - at runtime (!):&lt;br /&gt;
&lt;br /&gt;
* in the ARM TCM RAM0 and RAM1 (offset 0x5dd4): ''&amp;lt;BUBL 2011.0-rc1-g90833fe&amp;gt;''&lt;br /&gt;
* in the U-Boot environment on eMMC at absolute offset 0x5f000: ''baselineloader_version=BUBL 2011.0-rc1-g90833fe''&lt;br /&gt;
&lt;br /&gt;
This also gives an idea what the leading ''B'' could stands for - apparently ''baseline'' - whatever that means in this case ...&lt;br /&gt;
&lt;br /&gt;
BUBL completes the following [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L109 steps]:&lt;br /&gt;
&lt;br /&gt;
* setup PLL(s)&lt;br /&gt;
* setup timer(s)&lt;br /&gt;
* setup ADC&lt;br /&gt;
* setup DDR memory controller&lt;br /&gt;
* output (using UART0) various [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L44 pieces of information], determined via previously setup ADC (partially info the device bt_nexmed_hwmon.0 under Linux provides, too)&lt;br /&gt;
** board type (''BASI'')&lt;br /&gt;
** hardware version (''???'')&lt;br /&gt;
** boot device (''eMMC'')&lt;br /&gt;
** CPU frequency (''270'')&lt;br /&gt;
** RAM size (''??? MB'')&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
After these initial steps, BUBL [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L202 continues] with loading a binary blob from either NAND or eMMC into RAM. BUBL expects this binary blob to be a U-Boot binary.&lt;br /&gt;
&lt;br /&gt;
* if ADC value 4 says to boot from NAND (NOT the case on F454!)&lt;br /&gt;
** setup NAND interface&lt;br /&gt;
** read U-Boot from NAND (offset?, size?), into RAM at offset 0x81100000&lt;br /&gt;
* else&lt;br /&gt;
** setup MMC/SD interface&lt;br /&gt;
** read U-Boot from eMMC at offset 0x1000, size 256 KiB, into RAM at offset 0x81080000&lt;br /&gt;
&lt;br /&gt;
The binary blob loaded into RAM is checked for validity - if it is really a U-Boot binary (doubleword at offset 0x3c has to be 0xdeadbeef).&lt;br /&gt;
&lt;br /&gt;
If it is not U-Boot or if there is the character ''s'' received on UART0, BUBL discards any loaded binary blob and expects to [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L270 receive a S-record file] from UART0 instead. BUBL writes the received S-record file, translated to binary, into RAM at the offset determined from the S-record file.&lt;br /&gt;
&lt;br /&gt;
The last step is to either jump&lt;br /&gt;
&lt;br /&gt;
* to 0x81100000, in case of U-Boot from NAND  OR&lt;br /&gt;
* to 0x81080000, in case of U-Boot from eMMC  OR&lt;br /&gt;
* to the address determined from the receive S-record file.&lt;br /&gt;
&lt;br /&gt;
=== U-Boot ===&lt;br /&gt;
&lt;br /&gt;
The F454's user boot loader, BUBL, expects to load a U-Boot binary - via MMC/SD interface. It is expected to be 4 KiB into the F454's eMMC (offset 0x1000) and is assumed to be maximally 256 KiB in size.&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at the U-Boot environment (variable ''ver''), and also at the readable ASCII strings of the U-Boot binary, tells us what version of U-Boot is used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# fw_printenv | grep ^ver= | sed 's#^ver=##'&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
&lt;br /&gt;
root@basi:~# dd if=/dev/mmcblk0p1 bs=$((0xe00 + 0)) skip=1 count=$(((256 * 1024) / 0xe00)) 2&amp;gt;/dev/null | strings | grep -e 'U-Boot '&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
ubootver=U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
So it is obviously based on release candidate 2 for U-Boot 2010.12 . The Git commit hash, which follows ''-rc2-'' should tell us about the exact source code version.&lt;br /&gt;
&lt;br /&gt;
bticino published the source code on their [http://github.com/MyOpenCommunity MyOpenCommunity] site on [http://github.com GitHub]. It resides in a Git repository called http://github.com/MyOpenCommunity/u-boot-davinci-medium . As of this writing it's ''master'' branch of this repository is ahead by 3 newer commits. A link to the above mentioned commit hash is: [http://github.com/MyOpenCommunity/u-boot-davinci-medium/commit/3ed2d264ae41bbc05f961a8aececdd636cdb1582 3ed2d264ae41bbc05f961a8aececdd636cdb1582]. &lt;br /&gt;
&lt;br /&gt;
It turns out that this copy of U-Boot has been derived from:&lt;br /&gt;
&lt;br /&gt;
* arago-project.org [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=summary U-Boot for DaVinci], tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c DEV.DavinviBSP.03.01.01.38] (commit [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c 6ebeaa9])&lt;br /&gt;
* denx.de [http://www.denx.de/wiki/U-Boot/WebHome U-Boot], some commits after tag [http://git.denx.de/?p=u-boot.git;a=commit;h=d0d2271f8c62e830ec65fb069b6d12dd708e3e2f v2010.12-rc2] (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=f8689b f8689b])&lt;br /&gt;
&lt;br /&gt;
Note that arago-project.org does also have a tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=1af61f3b812b51f6f41ff37cd4a52ce6cfb21d7a DEV.DavinviBSP.03.01.01.39], which is currently equivalent to where the branch ''r39'' points to. And more interesting: this tag is just one single commit further than where tag DEV.DavinviBSP.03.01.01.38 points to.&lt;br /&gt;
&lt;br /&gt;
To avoid confusion: The [http://github.com/MyOpenCommunity MyOpenCommunity] also has a repository called [http://github.com/MyOpenCommunity/u-boot-davinci-medium-v2 u-boot-davinci-medium-v2]. This is newer version, based on denx.de's U-Boot (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=d41b3cc16fd97da23900f79e8fefdeedeebde8f6 d41b3cc]) - somewhere between versions [http://git.denx.de/?p=u-boot.git;a=commit;h=ebbf0d20aa85f623c49b7ed3349ebfea450c152d v2013.01-rc2] and [http://git.denx.de/?p=u-boot.git;a=commit;h=3ae7b240ad8c723d02aa79654220a07049b7ae4d v2013.01-rc1]. So later shipped F454 devices ''might'' have a U-Boot binary installed which is based on this newer source code base.&lt;br /&gt;
&lt;br /&gt;
==== Operation ====&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/version and /boot, while running F454 firmware version 1.00.37, suggest:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/version &lt;br /&gt;
Linux version 2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429 (bticino@medium1) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #1 PREEMPT Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
root@basi:~# ls -l /boot/&lt;br /&gt;
lrwxrwxrwx    1 root     root           66 Nov  8  2012 uImage -&amp;gt; uImage-2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the used [http://kernel.org Linux] kernel is apparently based on [http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tag/?h=linux-2.6.32.y&amp;amp;id=v2.6.32.17 version 2.6.32.17] within Git repository http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git .&lt;br /&gt;
&lt;br /&gt;
Furthermore, when we look at the kernel image file, called ''uImage'', which get's loaded by U-Boot on startup:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ unzip Firmware_F454_vers010037.zip&lt;br /&gt;
Archive:  Firmware_F454_vers010037.zip&lt;br /&gt;
  inflating: F454_010037.fwz&lt;br /&gt;
$ unzip -P F454  F454_010037.fwz&lt;br /&gt;
Archive:  F454_010037.fwz&lt;br /&gt;
  inflating: btweb_only.ext3.gz      &lt;br /&gt;
  inflating: btweb_only_recovery.ext3.gz  &lt;br /&gt;
  inflating: fwz.xml                 &lt;br /&gt;
  inflating: uImage&lt;br /&gt;
$ mkimage -l uImage &lt;br /&gt;
Image Name:   Arago/2.6.32.17-psp03.01.01.39/b&lt;br /&gt;
Created:      Thu Nov  8 17:02:33 2012&lt;br /&gt;
Image Type:   ARM Linux Kernel Image (uncompressed)&lt;br /&gt;
Data Size:    1720032 Bytes = 1679.72 kB = 1.64 MB&lt;br /&gt;
Load Address: 80008000&lt;br /&gt;
Entry Point:  80008000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We recognize 2 important hints within the ''Image Name'' of the uImage: ''Arago'' and the version amendment ''psp03.01.01.39''. Together with the amendment ''-davinci1'' seen within /proc/version, these 2 hints make a very strong suggestion that the used Linux kernel version is based on one managed by TI as part the [http://arago-project.org/ Arago project]: tag [http://arago-project.org/git/projects/?p=linux-davinci.git;a=commit;h=161e942bbb6e3603bccd1548865cfcce0910f1cc DEV.DaVinciPSP.03.01.01.39] within Git repository git://arago-project.org/git/projects/linux-davinci.git .&lt;br /&gt;
&lt;br /&gt;
All these assumption about on what version the used kernel is based on become certain facts after finding one of bticino's public Git repositories on [http://github.com GitHub]: http://github.com/MyOpenCommunity/linux-davinci-medium . It comprises the commit with the hash [http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429], which occurs in /proc/version as an amendment to the kernel version.&lt;br /&gt;
&lt;br /&gt;
Newer versions of the firmware apparently use slightly newer kernel versions/commits, which can also be found in the mentioned [http://github.com/MyOpenCommunity/linux-davinci-medium repository]. All these commits are part of a branch called [https://github.com/MyOpenCommunity/linux-davinci-medium/tree/f454_1 f454_1].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| compile stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| kernel version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| commit hash&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:16:09 CET 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/59f7438a4e85d0a2b1b985a65500a9f05366f6ce 59f7438a4e85d0a2b1b985a65500a9f05366f6ce]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep 4 18:03:59 CEST 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/f56c4d42a889cb71bd92d101e9e2b0e847ca1603 f56c4d42a889cb71bd92d101e9e2b0e847ca1603]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
Apparently all kernels include the set of configuration options used to compile them (CONFIG_IKCONFIG=y), because all kernel files have embedded gzip data blobs. To extract such a configuration file from a uImage like the ones found in firmware updates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# extract kernel image, (pure binary, arch/arm/boot/Image)&lt;br /&gt;
$ ZIO=$(binwalk uImage | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }'); \&lt;br /&gt;
	dd if=uImage bs=$ZIO skip=1 | gunzip &amp;gt;Image&lt;br /&gt;
# extract embedded config file&lt;br /&gt;
$ CGZO=$(binwalk Image | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }');&lt;br /&gt;
	dd if=Image bs=$CGZO skip=1 | gunzip &amp;gt;config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It turns out that all three different versions known so far do have exactly the same configuration. The only differences is the typical timestamp which is placed at the beginning of Linux kernel configuration files.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| time stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| md5sum&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:15:22 2014&lt;br /&gt;
|6973e72623f206073f9359035d076ae8&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep  4 18:03:13 2014&lt;br /&gt;
|3e3aaf37a4158eeb1e92417aa51bc16b&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following list shows some of the enabled features - '''''besides the expected ones''''' (support for the Davinci SoC and it's peripherals). Features, which might be surprising to see and/or which are most likely not really used by the current firmware:&lt;br /&gt;
&lt;br /&gt;
* core&lt;br /&gt;
**  Tickless System&lt;br /&gt;
**  Suspend to RAM and standby&lt;br /&gt;
* network&lt;br /&gt;
**  IPv4&lt;br /&gt;
***  in-kernel DHCP support&lt;br /&gt;
***  IPsec: transport, tunnel and BEET mode&lt;br /&gt;
**  IPv6 (module)&lt;br /&gt;
* drivers&lt;br /&gt;
**  loopback device (module)&lt;br /&gt;
**  TUN/TAP device (module)&lt;br /&gt;
**  PPP with async/sync serial support and deflate compression (modules)&lt;br /&gt;
**  network console logging&lt;br /&gt;
* filesystems&lt;br /&gt;
**  Dnotify and Inotify support&lt;br /&gt;
**  Kernel automounter v4 (module)&lt;br /&gt;
**  FAT&lt;br /&gt;
**  NFS v2 and v3&lt;br /&gt;
**  NFS v2 and v3 server (module)&lt;br /&gt;
**  SMB  (module)&lt;br /&gt;
&lt;br /&gt;
On an F454 running firmware version v1.00.37, the following modules are loaded:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# lsmod&lt;br /&gt;
Module                  Size  Used by&lt;br /&gt;
ipv6                  247137  16 &lt;br /&gt;
g_ether                27235  0 &lt;br /&gt;
musb_hdrc              28058  1 g_ether&lt;br /&gt;
dm365mmap               1955  0 &lt;br /&gt;
edmak                  12651  0 &lt;br /&gt;
irqk                    6411  0 &lt;br /&gt;
cmemk                  22327  0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of the above listed features, which are build as modules, just kernel level support for IPv6 is actually loaded. All other loaded modules are peripheral drivers.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=357</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=357"/>
		<updated>2015-02-28T12:18:25Z</updated>

		<summary type="html">&lt;p&gt;Joft: /* Hardware */ Add info about serial interfaces.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Serial interfaces ==&lt;br /&gt;
&lt;br /&gt;
The DM365 SoC includes two on-chip UARTs [http://www.ti.com/lit/ug/sprufh2/sprufh2.pdf], which are both more or less 8250/16550A compatible ones. For the F454 bticino added a third, external UART, also 8250/16550A compatible, which is apparently attached to the [http://www.ti.com/lit/ug/sprufi1c/sprufi1c.pdf Asynchronous External Memory Interface] of the DM365.&lt;br /&gt;
&lt;br /&gt;
Within Linux they are represented by ''ttySx'' character device nodes:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# ls -l /dev/ttyS*&lt;br /&gt;
crw-r-----    1 root     root       4,  64 Feb 21 16:35 /dev/ttyS0&lt;br /&gt;
crw-r-----    1 root     root       4,  65 Feb 22 10:55 /dev/ttyS1&lt;br /&gt;
crw-r-----    1 root     root       4,  66 Feb 22 10:55 /dev/ttyS2&lt;br /&gt;
crw-r-----    1 root     root     204,   5 Nov  8  2012 /dev/ttySA0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Note that the device node ''ttySA0'' (major 204, minor 5) does not really exist. It seems to be a leftover and is not needed/used.&lt;br /&gt;
&lt;br /&gt;
The following table shows how these UARTs are used:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| UART&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Linux device node&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| settings&lt;br /&gt;
|-&lt;br /&gt;
|DM365 UART0&lt;br /&gt;
|/dev/ttyS0&lt;br /&gt;
|BUBL, U-Boot and Linux system console&lt;br /&gt;
|115200 baud / no parity / 8 data bits / 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
|DM365 UART1&lt;br /&gt;
|/dev/ttyS1&lt;br /&gt;
|''SCS AV'' bus communication via a PIC microcontroller&lt;br /&gt;
|38400 baud / no parity / 8 data bits / 1 stop bit&lt;br /&gt;
|-&lt;br /&gt;
|external UART&lt;br /&gt;
|/dev/ttyS2&lt;br /&gt;
|''SCS AI'' bus communication via a (second) PIC microcontroller&lt;br /&gt;
|38400 baud / no parity / 8 data bits / 1 stop bit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The settings can be verified by, for example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# stty -a -F /dev/ttyS1&lt;br /&gt;
speed 38400 baud; rows 24; columns 80;&lt;br /&gt;
intr = &amp;lt;undef&amp;gt;; quit = &amp;lt;undef&amp;gt;; erase = &amp;lt;undef&amp;gt;; kill = &amp;lt;undef&amp;gt;; eof = ^D; eol = &amp;lt;undef&amp;gt;; eol2 = &amp;lt;undef&amp;gt;; start = &amp;lt;undef&amp;gt;; stop = &amp;lt;undef&amp;gt;;&lt;br /&gt;
susp = &amp;lt;undef&amp;gt;; rprnt = &amp;lt;undef&amp;gt;; werase = &amp;lt;undef&amp;gt;; lnext = &amp;lt;undef&amp;gt;; flush = &amp;lt;undef&amp;gt;; min = 1; time = 0;&lt;br /&gt;
-parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts&lt;br /&gt;
-ignbrk -brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon ixoff -iuclc -ixany -imaxbel&lt;br /&gt;
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0&lt;br /&gt;
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Accessibility ===&lt;br /&gt;
&lt;br /&gt;
Bticino's F454 [http://www.homesystems-legrandgroup.com/technicalDocuments/type5/MQ00519-b-EN.pdf Technial Sheet] documents there is a ''Serial connector RS232'' behind the hatch of the F454's case, left of the 3 LEDs. &lt;br /&gt;
&lt;br /&gt;
It is a 5 pin male connector of an, at least to your author, unknown type ''(TODO)''. In general it seems more than likely that this connector is going to UART0, the system console. However it remains unclear, which pins are what (3 needed at least: GND, TX, RX) and what the voltage levels are ''(TODO)''. Of course, the designation ''RS232'' is a pretty clear statement and suggests that the PCB includes a MAX232 or similar and thus it could be directly connected to a PCs serial port/USB-to-serial.&lt;br /&gt;
&lt;br /&gt;
''TODO: try it out, determine pins''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
For its DaVinci SoCs, to compile Linux kernels, TI recommends [http://processors.wiki.ti.com/index.php/DaVinci_GIT_Linux_Kernel#Overview] CodeSourcery's ''GNU Toolchain for ARM Processors'', version ''2009q1-203'', which can be downloaded as a [http://www.codesourcery.com/sgpp/lite/arm/portal/package4573/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 tar archive] (or a [http://www.codesourcery.com/sgpp/lite/arm/portal/package4573/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi.bin self-extracting archive], ''bigger not recommended'').&lt;br /&gt;
&lt;br /&gt;
TI's [http://arago-project.org Arago Project] also refers to that specific tool chain version [http://arago-project.org/wiki/index.php/Getting_CodeSourcery_Toolchain] - to be used not only for kernel, but to compile everything - from bootloader to userspace applications.&lt;br /&gt;
&lt;br /&gt;
This tool chain can also be found, pre-installed, in bticino's [http://www.myopen-legrandgroup.com/devices/gateways/m/f454_-_003598/45317.aspx F454/003598 SDK]. The SDK is a Ubuntu 12.04 Live DVD, with some non-standard programs like this tool chain pre-installed.&lt;br /&gt;
&lt;br /&gt;
== Boot loader ==&lt;br /&gt;
&lt;br /&gt;
=== ARM ROM boot loader - RBL ===&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM processor starts with executing the ARM ''ROM boot loader'' (RBL), which most likely resides in an address space starting at 0x00018000. The RBL searches for a ''user boot loader'' (UBL). In case of the F454 the current assumption is that it does so via DM365's interface SPI0 - on an attached SPI EEPROM.&lt;br /&gt;
&lt;br /&gt;
The RBL specifically searches for a certain ''magic number'' (32 bit), which is 0xa1acedxx. At this point in time it remains a little bit unclear if this number has to be at offset 0x0 of the EEPROM (most likely) or if it can reside within a certain range of bytes/pages/whatever.&lt;br /&gt;
&lt;br /&gt;
The magic number must be followed by 20 bytes of additional information, like UBL executable entry point, size of the UBL, start and load addresses, flags ... TI's [http://www.ti.com/lit/pdf/sprufg5 DM36x User's Guide] has all the details, chapter 11.2.5, page 188.&lt;br /&gt;
&lt;br /&gt;
After having found this piece of information, the RBL acts accordingly: loads the UBL into the ARM's TCM RAM0 and RAM1 (2x 16 KiB, at address space offset 0x0000 and 0x4000 respectively) and jumps to the specified entry point.&lt;br /&gt;
&lt;br /&gt;
=== User boot loader - UBL ===&lt;br /&gt;
&lt;br /&gt;
The ''user boot loader'' (UBL) used by the F454 is called ''BUBL'' and its source code can be found on [https://gitorious.org/ gitorious.org] in repository called [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9: medium_platform/bubl].&lt;br /&gt;
&lt;br /&gt;
As of this writing, the latest commit has the hash [https://gitorious.org/medium_platform/bubl/commit/90833fe26b0c5a833054e939909fc887c94561d9 90833fe] . Apparently this is exactly the version used in the F454, since this commit hash can be found in 2 places on the F454 - at runtime (!):&lt;br /&gt;
&lt;br /&gt;
* in the ARM TCM RAM0 and RAM1 (offset 0x5dd4): ''&amp;lt;BUBL 2011.0-rc1-g90833fe&amp;gt;''&lt;br /&gt;
* in the U-Boot environment on eMMC at absolute offset 0x5f000: ''baselineloader_version=BUBL 2011.0-rc1-g90833fe''&lt;br /&gt;
&lt;br /&gt;
This also gives an idea what the leading ''B'' could stands for - apparently ''baseline'' - whatever that means in this case ...&lt;br /&gt;
&lt;br /&gt;
BUBL completes the following [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L109 steps]:&lt;br /&gt;
&lt;br /&gt;
* setup PLL(s)&lt;br /&gt;
* setup timer(s)&lt;br /&gt;
* setup ADC&lt;br /&gt;
* setup DDR memory controller&lt;br /&gt;
* output (using UART0) various [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L44 pieces of information], determined via previously setup ADC (partially info the device bt_nexmed_hwmon.0 under Linux provides, too)&lt;br /&gt;
** board type (''BASI'')&lt;br /&gt;
** hardware version (''???'')&lt;br /&gt;
** boot device (''eMMC'')&lt;br /&gt;
** CPU frequency (''270'')&lt;br /&gt;
** RAM size (''??? MB'')&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
After these initial steps, BUBL [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L202 continues] with loading a binary blob from either NAND or eMMC into RAM. BUBL expects this binary blob to be a U-Boot binary.&lt;br /&gt;
&lt;br /&gt;
* if ADC value 4 says to boot from NAND (NOT the case on F454!)&lt;br /&gt;
** setup NAND interface&lt;br /&gt;
** read U-Boot from NAND (offset?, size?), into RAM at offset 0x81100000&lt;br /&gt;
* else&lt;br /&gt;
** setup MMC/SD interface&lt;br /&gt;
** read U-Boot from eMMC at offset 0x1000, size 256 KiB, into RAM at offset 0x81080000&lt;br /&gt;
&lt;br /&gt;
The binary blob loaded into RAM is checked for validity - if it is really a U-Boot binary (doubleword at offset 0x3c has to be 0xdeadbeef).&lt;br /&gt;
&lt;br /&gt;
If it is not U-Boot or if there is the character ''s'' received on UART0, BUBL discards any loaded binary blob and expects to [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L270 receive a S-record file] from UART0 instead. BUBL writes the received S-record file, translated to binary, into RAM at the offset determined from the S-record file.&lt;br /&gt;
&lt;br /&gt;
The last step is to either jump&lt;br /&gt;
&lt;br /&gt;
* to 0x81100000, in case of U-Boot from NAND  OR&lt;br /&gt;
* to 0x81080000, in case of U-Boot from eMMC  OR&lt;br /&gt;
* to the address determined from the receive S-record file.&lt;br /&gt;
&lt;br /&gt;
=== U-Boot ===&lt;br /&gt;
&lt;br /&gt;
The F454's user boot loader, BUBL, expects to load a U-Boot binary - via MMC/SD interface. It is expected to be 4 KiB into the F454's eMMC (offset 0x1000) and is assumed to be maximally 256 KiB in size.&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at the U-Boot environment (variable ''ver''), and also at the readable ASCII strings of the U-Boot binary, tells us what version of U-Boot is used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# fw_printenv | grep ^ver= | sed 's#^ver=##'&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
&lt;br /&gt;
root@basi:~# dd if=/dev/mmcblk0p1 bs=$((0xe00 + 0)) skip=1 count=$(((256 * 1024) / 0xe00)) 2&amp;gt;/dev/null | strings | grep -e 'U-Boot '&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
ubootver=U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
So it is obviously based on release candidate 2 for U-Boot 2010.12 . The Git commit hash, which follows ''-rc2-'' should tell us about the exact source code version.&lt;br /&gt;
&lt;br /&gt;
bticino published the source code on their [http://github.com/MyOpenCommunity MyOpenCommunity] site on [http://github.com GitHub]. It resides in a Git repository called http://github.com/MyOpenCommunity/u-boot-davinci-medium . As of this writing it's ''master'' branch of this repository is ahead by 3 newer commits. A link to the above mentioned commit hash is: [http://github.com/MyOpenCommunity/u-boot-davinci-medium/commit/3ed2d264ae41bbc05f961a8aececdd636cdb1582 3ed2d264ae41bbc05f961a8aececdd636cdb1582]. &lt;br /&gt;
&lt;br /&gt;
It turns out that this copy of U-Boot has been derived from:&lt;br /&gt;
&lt;br /&gt;
* arago-project.org [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=summary U-Boot for DaVinci], tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c DEV.DavinviBSP.03.01.01.38] (commit [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c 6ebeaa9])&lt;br /&gt;
* denx.de [http://www.denx.de/wiki/U-Boot/WebHome U-Boot], some commits after tag [http://git.denx.de/?p=u-boot.git;a=commit;h=d0d2271f8c62e830ec65fb069b6d12dd708e3e2f v2010.12-rc2] (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=f8689b f8689b])&lt;br /&gt;
&lt;br /&gt;
Note that arago-project.org does also have a tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=1af61f3b812b51f6f41ff37cd4a52ce6cfb21d7a DEV.DavinviBSP.03.01.01.39], which is currently equivalent to where the branch ''r39'' points to. And more interesting: this tag is just one single commit further than where tag DEV.DavinviBSP.03.01.01.38 points to.&lt;br /&gt;
&lt;br /&gt;
To avoid confusion: The [http://github.com/MyOpenCommunity MyOpenCommunity] also has a repository called [http://github.com/MyOpenCommunity/u-boot-davinci-medium-v2 u-boot-davinci-medium-v2]. This is newer version, based on denx.de's U-Boot (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=d41b3cc16fd97da23900f79e8fefdeedeebde8f6 d41b3cc]) - somewhere between versions [http://git.denx.de/?p=u-boot.git;a=commit;h=ebbf0d20aa85f623c49b7ed3349ebfea450c152d v2013.01-rc2] and [http://git.denx.de/?p=u-boot.git;a=commit;h=3ae7b240ad8c723d02aa79654220a07049b7ae4d v2013.01-rc1]. So later shipped F454 devices ''might'' have a U-Boot binary installed which is based on this newer source code base.&lt;br /&gt;
&lt;br /&gt;
==== Operation ====&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/version and /boot, while running F454 firmware version 1.00.37, suggest:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/version &lt;br /&gt;
Linux version 2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429 (bticino@medium1) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #1 PREEMPT Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
root@basi:~# ls -l /boot/&lt;br /&gt;
lrwxrwxrwx    1 root     root           66 Nov  8  2012 uImage -&amp;gt; uImage-2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the used [http://kernel.org Linux] kernel is apparently based on [http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tag/?h=linux-2.6.32.y&amp;amp;id=v2.6.32.17 version 2.6.32.17] within Git repository http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git .&lt;br /&gt;
&lt;br /&gt;
Furthermore, when we look at the kernel image file, called ''uImage'', which get's loaded by U-Boot on startup:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ unzip Firmware_F454_vers010037.zip&lt;br /&gt;
Archive:  Firmware_F454_vers010037.zip&lt;br /&gt;
  inflating: F454_010037.fwz&lt;br /&gt;
$ unzip -P F454  F454_010037.fwz&lt;br /&gt;
Archive:  F454_010037.fwz&lt;br /&gt;
  inflating: btweb_only.ext3.gz      &lt;br /&gt;
  inflating: btweb_only_recovery.ext3.gz  &lt;br /&gt;
  inflating: fwz.xml                 &lt;br /&gt;
  inflating: uImage&lt;br /&gt;
$ mkimage -l uImage &lt;br /&gt;
Image Name:   Arago/2.6.32.17-psp03.01.01.39/b&lt;br /&gt;
Created:      Thu Nov  8 17:02:33 2012&lt;br /&gt;
Image Type:   ARM Linux Kernel Image (uncompressed)&lt;br /&gt;
Data Size:    1720032 Bytes = 1679.72 kB = 1.64 MB&lt;br /&gt;
Load Address: 80008000&lt;br /&gt;
Entry Point:  80008000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We recognize 2 important hints within the ''Image Name'' of the uImage: ''Arago'' and the version amendment ''psp03.01.01.39''. Together with the amendment ''-davinci1'' seen within /proc/version, these 2 hints make a very strong suggestion that the used Linux kernel version is based on one managed by TI as part the [http://arago-project.org/ Arago project]: tag [http://arago-project.org/git/projects/?p=linux-davinci.git;a=commit;h=161e942bbb6e3603bccd1548865cfcce0910f1cc DEV.DaVinciPSP.03.01.01.39] within Git repository git://arago-project.org/git/projects/linux-davinci.git .&lt;br /&gt;
&lt;br /&gt;
All these assumption about on what version the used kernel is based on become certain facts after finding one of bticino's public Git repositories on [http://github.com GitHub]: http://github.com/MyOpenCommunity/linux-davinci-medium . It comprises the commit with the hash [http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429], which occurs in /proc/version as an amendment to the kernel version.&lt;br /&gt;
&lt;br /&gt;
Newer versions of the firmware apparently use slightly newer kernel versions/commits, which can also be found in the mentioned [http://github.com/MyOpenCommunity/linux-davinci-medium repository]. All these commits are part of a branch called [https://github.com/MyOpenCommunity/linux-davinci-medium/tree/f454_1 f454_1].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| compile stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| kernel version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| commit hash&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:16:09 CET 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/59f7438a4e85d0a2b1b985a65500a9f05366f6ce 59f7438a4e85d0a2b1b985a65500a9f05366f6ce]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep 4 18:03:59 CEST 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/f56c4d42a889cb71bd92d101e9e2b0e847ca1603 f56c4d42a889cb71bd92d101e9e2b0e847ca1603]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
Apparently all kernels include the set of configuration options used to compile them (CONFIG_IKCONFIG=y), because all kernel files have embedded gzip data blobs. To extract such a configuration file from a uImage like the ones found in firmware updates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# extract kernel image, (pure binary, arch/arm/boot/Image)&lt;br /&gt;
$ ZIO=$(binwalk uImage | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }'); \&lt;br /&gt;
	dd if=uImage bs=$ZIO skip=1 | gunzip &amp;gt;Image&lt;br /&gt;
# extract embedded config file&lt;br /&gt;
$ CGZO=$(binwalk Image | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }');&lt;br /&gt;
	dd if=Image bs=$CGZO skip=1 | gunzip &amp;gt;config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It turns out that all three different versions known so far do have exactly the same configuration. The only differences is the typical timestamp which is placed at the beginning of Linux kernel configuration files.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| time stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| md5sum&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:15:22 2014&lt;br /&gt;
|6973e72623f206073f9359035d076ae8&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep  4 18:03:13 2014&lt;br /&gt;
|3e3aaf37a4158eeb1e92417aa51bc16b&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following list shows some of the enabled features - '''''besides the expected ones''''' (support for the Davinci SoC and it's peripherals). Features, which might be surprising to see and/or which are most likely not really used by the current firmware:&lt;br /&gt;
&lt;br /&gt;
* core&lt;br /&gt;
**  Tickless System&lt;br /&gt;
**  Suspend to RAM and standby&lt;br /&gt;
* network&lt;br /&gt;
**  IPv4&lt;br /&gt;
***  in-kernel DHCP support&lt;br /&gt;
***  IPsec: transport, tunnel and BEET mode&lt;br /&gt;
**  IPv6 (module)&lt;br /&gt;
* drivers&lt;br /&gt;
**  loopback device (module)&lt;br /&gt;
**  TUN/TAP device (module)&lt;br /&gt;
**  PPP with async/sync serial support and deflate compression (modules)&lt;br /&gt;
**  network console logging&lt;br /&gt;
* filesystems&lt;br /&gt;
**  Dnotify and Inotify support&lt;br /&gt;
**  Kernel automounter v4 (module)&lt;br /&gt;
**  FAT&lt;br /&gt;
**  NFS v2 and v3&lt;br /&gt;
**  NFS v2 and v3 server (module)&lt;br /&gt;
**  SMB  (module)&lt;br /&gt;
&lt;br /&gt;
On an F454 running firmware version v1.00.37, the following modules are loaded:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# lsmod&lt;br /&gt;
Module                  Size  Used by&lt;br /&gt;
ipv6                  247137  16 &lt;br /&gt;
g_ether                27235  0 &lt;br /&gt;
musb_hdrc              28058  1 g_ether&lt;br /&gt;
dm365mmap               1955  0 &lt;br /&gt;
edmak                  12651  0 &lt;br /&gt;
irqk                    6411  0 &lt;br /&gt;
cmemk                  22327  0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of the above listed features, which are build as modules, just kernel level support for IPv6 is actually loaded. All other loaded modules are peripheral drivers.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=356</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=356"/>
		<updated>2015-02-28T10:28:10Z</updated>

		<summary type="html">&lt;p&gt;Joft: /* Tool Chain */ Start to fill in this section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
For its DaVinci SoCs, to compile Linux kernels, TI recommends [http://processors.wiki.ti.com/index.php/DaVinci_GIT_Linux_Kernel#Overview] CodeSourcery's ''GNU Toolchain for ARM Processors'', version ''2009q1-203'', which can be downloaded as a [http://www.codesourcery.com/sgpp/lite/arm/portal/package4573/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 tar archive] (or a [http://www.codesourcery.com/sgpp/lite/arm/portal/package4573/public/arm-none-linux-gnueabi/arm-2009q1-203-arm-none-linux-gnueabi.bin self-extracting archive], ''bigger not recommended'').&lt;br /&gt;
&lt;br /&gt;
TI's [http://arago-project.org Arago Project] also refers to that specific tool chain version [http://arago-project.org/wiki/index.php/Getting_CodeSourcery_Toolchain] - to be used not only for kernel, but to compile everything - from bootloader to userspace applications.&lt;br /&gt;
&lt;br /&gt;
This tool chain can also be found, pre-installed, in bticino's [http://www.myopen-legrandgroup.com/devices/gateways/m/f454_-_003598/45317.aspx F454/003598 SDK]. The SDK is a Ubuntu 12.04 Live DVD, with some non-standard programs like this tool chain pre-installed.&lt;br /&gt;
&lt;br /&gt;
== Boot loader ==&lt;br /&gt;
&lt;br /&gt;
=== ARM ROM boot loader - RBL ===&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM processor starts with executing the ARM ''ROM boot loader'' (RBL), which most likely resides in an address space starting at 0x00018000. The RBL searches for a ''user boot loader'' (UBL). In case of the F454 the current assumption is that it does so via DM365's interface SPI0 - on an attached SPI EEPROM.&lt;br /&gt;
&lt;br /&gt;
The RBL specifically searches for a certain ''magic number'' (32 bit), which is 0xa1acedxx. At this point in time it remains a little bit unclear if this number has to be at offset 0x0 of the EEPROM (most likely) or if it can reside within a certain range of bytes/pages/whatever.&lt;br /&gt;
&lt;br /&gt;
The magic number must be followed by 20 bytes of additional information, like UBL executable entry point, size of the UBL, start and load addresses, flags ... TI's [http://www.ti.com/lit/pdf/sprufg5 DM36x User's Guide] has all the details, chapter 11.2.5, page 188.&lt;br /&gt;
&lt;br /&gt;
After having found this piece of information, the RBL acts accordingly: loads the UBL into the ARM's TCM RAM0 and RAM1 (2x 16 KiB, at address space offset 0x0000 and 0x4000 respectively) and jumps to the specified entry point.&lt;br /&gt;
&lt;br /&gt;
=== User boot loader - UBL ===&lt;br /&gt;
&lt;br /&gt;
The ''user boot loader'' (UBL) used by the F454 is called ''BUBL'' and its source code can be found on [https://gitorious.org/ gitorious.org] in repository called [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9: medium_platform/bubl].&lt;br /&gt;
&lt;br /&gt;
As of this writing, the latest commit has the hash [https://gitorious.org/medium_platform/bubl/commit/90833fe26b0c5a833054e939909fc887c94561d9 90833fe] . Apparently this is exactly the version used in the F454, since this commit hash can be found in 2 places on the F454 - at runtime (!):&lt;br /&gt;
&lt;br /&gt;
* in the ARM TCM RAM0 and RAM1 (offset 0x5dd4): ''&amp;lt;BUBL 2011.0-rc1-g90833fe&amp;gt;''&lt;br /&gt;
* in the U-Boot environment on eMMC at absolute offset 0x5f000: ''baselineloader_version=BUBL 2011.0-rc1-g90833fe''&lt;br /&gt;
&lt;br /&gt;
This also gives an idea what the leading ''B'' could stands for - apparently ''baseline'' - whatever that means in this case ...&lt;br /&gt;
&lt;br /&gt;
BUBL completes the following [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L109 steps]:&lt;br /&gt;
&lt;br /&gt;
* setup PLL(s)&lt;br /&gt;
* setup timer(s)&lt;br /&gt;
* setup ADC&lt;br /&gt;
* setup DDR memory controller&lt;br /&gt;
* output (using UART0) various [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L44 pieces of information], determined via previously setup ADC (partially info the device bt_nexmed_hwmon.0 under Linux provides, too)&lt;br /&gt;
** board type (''BASI'')&lt;br /&gt;
** hardware version (''???'')&lt;br /&gt;
** boot device (''eMMC'')&lt;br /&gt;
** CPU frequency (''270'')&lt;br /&gt;
** RAM size (''??? MB'')&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
After these initial steps, BUBL [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L202 continues] with loading a binary blob from either NAND or eMMC into RAM. BUBL expects this binary blob to be a U-Boot binary.&lt;br /&gt;
&lt;br /&gt;
* if ADC value 4 says to boot from NAND (NOT the case on F454!)&lt;br /&gt;
** setup NAND interface&lt;br /&gt;
** read U-Boot from NAND (offset?, size?), into RAM at offset 0x81100000&lt;br /&gt;
* else&lt;br /&gt;
** setup MMC/SD interface&lt;br /&gt;
** read U-Boot from eMMC at offset 0x1000, size 256 KiB, into RAM at offset 0x81080000&lt;br /&gt;
&lt;br /&gt;
The binary blob loaded into RAM is checked for validity - if it is really a U-Boot binary (doubleword at offset 0x3c has to be 0xdeadbeef).&lt;br /&gt;
&lt;br /&gt;
If it is not U-Boot or if there is the character ''s'' received on UART0, BUBL discards any loaded binary blob and expects to [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L270 receive a S-record file] from UART0 instead. BUBL writes the received S-record file, translated to binary, into RAM at the offset determined from the S-record file.&lt;br /&gt;
&lt;br /&gt;
The last step is to either jump&lt;br /&gt;
&lt;br /&gt;
* to 0x81100000, in case of U-Boot from NAND  OR&lt;br /&gt;
* to 0x81080000, in case of U-Boot from eMMC  OR&lt;br /&gt;
* to the address determined from the receive S-record file.&lt;br /&gt;
&lt;br /&gt;
=== U-Boot ===&lt;br /&gt;
&lt;br /&gt;
The F454's user boot loader, BUBL, expects to load a U-Boot binary - via MMC/SD interface. It is expected to be 4 KiB into the F454's eMMC (offset 0x1000) and is assumed to be maximally 256 KiB in size.&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at the U-Boot environment (variable ''ver''), and also at the readable ASCII strings of the U-Boot binary, tells us what version of U-Boot is used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# fw_printenv | grep ^ver= | sed 's#^ver=##'&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
&lt;br /&gt;
root@basi:~# dd if=/dev/mmcblk0p1 bs=$((0xe00 + 0)) skip=1 count=$(((256 * 1024) / 0xe00)) 2&amp;gt;/dev/null | strings | grep -e 'U-Boot '&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
ubootver=U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
So it is obviously based on release candidate 2 for U-Boot 2010.12 . The Git commit hash, which follows ''-rc2-'' should tell us about the exact source code version.&lt;br /&gt;
&lt;br /&gt;
bticino published the source code on their [http://github.com/MyOpenCommunity MyOpenCommunity] site on [http://github.com GitHub]. It resides in a Git repository called http://github.com/MyOpenCommunity/u-boot-davinci-medium . As of this writing it's ''master'' branch of this repository is ahead by 3 newer commits. A link to the above mentioned commit hash is: [http://github.com/MyOpenCommunity/u-boot-davinci-medium/commit/3ed2d264ae41bbc05f961a8aececdd636cdb1582 3ed2d264ae41bbc05f961a8aececdd636cdb1582]. &lt;br /&gt;
&lt;br /&gt;
It turns out that this copy of U-Boot has been derived from:&lt;br /&gt;
&lt;br /&gt;
* arago-project.org [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=summary U-Boot for DaVinci], tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c DEV.DavinviBSP.03.01.01.38] (commit [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c 6ebeaa9])&lt;br /&gt;
* denx.de [http://www.denx.de/wiki/U-Boot/WebHome U-Boot], some commits after tag [http://git.denx.de/?p=u-boot.git;a=commit;h=d0d2271f8c62e830ec65fb069b6d12dd708e3e2f v2010.12-rc2] (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=f8689b f8689b])&lt;br /&gt;
&lt;br /&gt;
Note that arago-project.org does also have a tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=1af61f3b812b51f6f41ff37cd4a52ce6cfb21d7a DEV.DavinviBSP.03.01.01.39], which is currently equivalent to where the branch ''r39'' points to. And more interesting: this tag is just one single commit further than where tag DEV.DavinviBSP.03.01.01.38 points to.&lt;br /&gt;
&lt;br /&gt;
To avoid confusion: The [http://github.com/MyOpenCommunity MyOpenCommunity] also has a repository called [http://github.com/MyOpenCommunity/u-boot-davinci-medium-v2 u-boot-davinci-medium-v2]. This is newer version, based on denx.de's U-Boot (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=d41b3cc16fd97da23900f79e8fefdeedeebde8f6 d41b3cc]) - somewhere between versions [http://git.denx.de/?p=u-boot.git;a=commit;h=ebbf0d20aa85f623c49b7ed3349ebfea450c152d v2013.01-rc2] and [http://git.denx.de/?p=u-boot.git;a=commit;h=3ae7b240ad8c723d02aa79654220a07049b7ae4d v2013.01-rc1]. So later shipped F454 devices ''might'' have a U-Boot binary installed which is based on this newer source code base.&lt;br /&gt;
&lt;br /&gt;
==== Operation ====&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/version and /boot, while running F454 firmware version 1.00.37, suggest:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/version &lt;br /&gt;
Linux version 2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429 (bticino@medium1) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #1 PREEMPT Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
root@basi:~# ls -l /boot/&lt;br /&gt;
lrwxrwxrwx    1 root     root           66 Nov  8  2012 uImage -&amp;gt; uImage-2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the used [http://kernel.org Linux] kernel is apparently based on [http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tag/?h=linux-2.6.32.y&amp;amp;id=v2.6.32.17 version 2.6.32.17] within Git repository http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git .&lt;br /&gt;
&lt;br /&gt;
Furthermore, when we look at the kernel image file, called ''uImage'', which get's loaded by U-Boot on startup:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ unzip Firmware_F454_vers010037.zip&lt;br /&gt;
Archive:  Firmware_F454_vers010037.zip&lt;br /&gt;
  inflating: F454_010037.fwz&lt;br /&gt;
$ unzip -P F454  F454_010037.fwz&lt;br /&gt;
Archive:  F454_010037.fwz&lt;br /&gt;
  inflating: btweb_only.ext3.gz      &lt;br /&gt;
  inflating: btweb_only_recovery.ext3.gz  &lt;br /&gt;
  inflating: fwz.xml                 &lt;br /&gt;
  inflating: uImage&lt;br /&gt;
$ mkimage -l uImage &lt;br /&gt;
Image Name:   Arago/2.6.32.17-psp03.01.01.39/b&lt;br /&gt;
Created:      Thu Nov  8 17:02:33 2012&lt;br /&gt;
Image Type:   ARM Linux Kernel Image (uncompressed)&lt;br /&gt;
Data Size:    1720032 Bytes = 1679.72 kB = 1.64 MB&lt;br /&gt;
Load Address: 80008000&lt;br /&gt;
Entry Point:  80008000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We recognize 2 important hints within the ''Image Name'' of the uImage: ''Arago'' and the version amendment ''psp03.01.01.39''. Together with the amendment ''-davinci1'' seen within /proc/version, these 2 hints make a very strong suggestion that the used Linux kernel version is based on one managed by TI as part the [http://arago-project.org/ Arago project]: tag [http://arago-project.org/git/projects/?p=linux-davinci.git;a=commit;h=161e942bbb6e3603bccd1548865cfcce0910f1cc DEV.DaVinciPSP.03.01.01.39] within Git repository git://arago-project.org/git/projects/linux-davinci.git .&lt;br /&gt;
&lt;br /&gt;
All these assumption about on what version the used kernel is based on become certain facts after finding one of bticino's public Git repositories on [http://github.com GitHub]: http://github.com/MyOpenCommunity/linux-davinci-medium . It comprises the commit with the hash [http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429], which occurs in /proc/version as an amendment to the kernel version.&lt;br /&gt;
&lt;br /&gt;
Newer versions of the firmware apparently use slightly newer kernel versions/commits, which can also be found in the mentioned [http://github.com/MyOpenCommunity/linux-davinci-medium repository]. All these commits are part of a branch called [https://github.com/MyOpenCommunity/linux-davinci-medium/tree/f454_1 f454_1].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| compile stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| kernel version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| commit hash&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:16:09 CET 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/59f7438a4e85d0a2b1b985a65500a9f05366f6ce 59f7438a4e85d0a2b1b985a65500a9f05366f6ce]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep 4 18:03:59 CEST 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/f56c4d42a889cb71bd92d101e9e2b0e847ca1603 f56c4d42a889cb71bd92d101e9e2b0e847ca1603]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
Apparently all kernels include the set of configuration options used to compile them (CONFIG_IKCONFIG=y), because all kernel files have embedded gzip data blobs. To extract such a configuration file from a uImage like the ones found in firmware updates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# extract kernel image, (pure binary, arch/arm/boot/Image)&lt;br /&gt;
$ ZIO=$(binwalk uImage | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }'); \&lt;br /&gt;
	dd if=uImage bs=$ZIO skip=1 | gunzip &amp;gt;Image&lt;br /&gt;
# extract embedded config file&lt;br /&gt;
$ CGZO=$(binwalk Image | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }');&lt;br /&gt;
	dd if=Image bs=$CGZO skip=1 | gunzip &amp;gt;config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It turns out that all three different versions known so far do have exactly the same configuration. The only differences is the typical timestamp which is placed at the beginning of Linux kernel configuration files.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| time stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| md5sum&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:15:22 2014&lt;br /&gt;
|6973e72623f206073f9359035d076ae8&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep  4 18:03:13 2014&lt;br /&gt;
|3e3aaf37a4158eeb1e92417aa51bc16b&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following list shows some of the enabled features - '''''besides the expected ones''''' (support for the Davinci SoC and it's peripherals). Features, which might be surprising to see and/or which are most likely not really used by the current firmware:&lt;br /&gt;
&lt;br /&gt;
* core&lt;br /&gt;
**  Tickless System&lt;br /&gt;
**  Suspend to RAM and standby&lt;br /&gt;
* network&lt;br /&gt;
**  IPv4&lt;br /&gt;
***  in-kernel DHCP support&lt;br /&gt;
***  IPsec: transport, tunnel and BEET mode&lt;br /&gt;
**  IPv6 (module)&lt;br /&gt;
* drivers&lt;br /&gt;
**  loopback device (module)&lt;br /&gt;
**  TUN/TAP device (module)&lt;br /&gt;
**  PPP with async/sync serial support and deflate compression (modules)&lt;br /&gt;
**  network console logging&lt;br /&gt;
* filesystems&lt;br /&gt;
**  Dnotify and Inotify support&lt;br /&gt;
**  Kernel automounter v4 (module)&lt;br /&gt;
**  FAT&lt;br /&gt;
**  NFS v2 and v3&lt;br /&gt;
**  NFS v2 and v3 server (module)&lt;br /&gt;
**  SMB  (module)&lt;br /&gt;
&lt;br /&gt;
On an F454 running firmware version v1.00.37, the following modules are loaded:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# lsmod&lt;br /&gt;
Module                  Size  Used by&lt;br /&gt;
ipv6                  247137  16 &lt;br /&gt;
g_ether                27235  0 &lt;br /&gt;
musb_hdrc              28058  1 g_ether&lt;br /&gt;
dm365mmap               1955  0 &lt;br /&gt;
edmak                  12651  0 &lt;br /&gt;
irqk                    6411  0 &lt;br /&gt;
cmemk                  22327  0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of the above listed features, which are build as modules, just kernel level support for IPv6 is actually loaded. All other loaded modules are peripheral drivers.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=355</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=355"/>
		<updated>2015-02-27T20:02:36Z</updated>

		<summary type="html">&lt;p&gt;Joft: /* Origin */ Point to n recently published U-Boot source code, show grep version from binary.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Boot loader ==&lt;br /&gt;
&lt;br /&gt;
=== ARM ROM boot loader - RBL ===&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM processor starts with executing the ARM ''ROM boot loader'' (RBL), which most likely resides in an address space starting at 0x00018000. The RBL searches for a ''user boot loader'' (UBL). In case of the F454 the current assumption is that it does so via DM365's interface SPI0 - on an attached SPI EEPROM.&lt;br /&gt;
&lt;br /&gt;
The RBL specifically searches for a certain ''magic number'' (32 bit), which is 0xa1acedxx. At this point in time it remains a little bit unclear if this number has to be at offset 0x0 of the EEPROM (most likely) or if it can reside within a certain range of bytes/pages/whatever.&lt;br /&gt;
&lt;br /&gt;
The magic number must be followed by 20 bytes of additional information, like UBL executable entry point, size of the UBL, start and load addresses, flags ... TI's [http://www.ti.com/lit/pdf/sprufg5 DM36x User's Guide] has all the details, chapter 11.2.5, page 188.&lt;br /&gt;
&lt;br /&gt;
After having found this piece of information, the RBL acts accordingly: loads the UBL into the ARM's TCM RAM0 and RAM1 (2x 16 KiB, at address space offset 0x0000 and 0x4000 respectively) and jumps to the specified entry point.&lt;br /&gt;
&lt;br /&gt;
=== User boot loader - UBL ===&lt;br /&gt;
&lt;br /&gt;
The ''user boot loader'' (UBL) used by the F454 is called ''BUBL'' and its source code can be found on [https://gitorious.org/ gitorious.org] in repository called [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9: medium_platform/bubl].&lt;br /&gt;
&lt;br /&gt;
As of this writing, the latest commit has the hash [https://gitorious.org/medium_platform/bubl/commit/90833fe26b0c5a833054e939909fc887c94561d9 90833fe] . Apparently this is exactly the version used in the F454, since this commit hash can be found in 2 places on the F454 - at runtime (!):&lt;br /&gt;
&lt;br /&gt;
* in the ARM TCM RAM0 and RAM1 (offset 0x5dd4): ''&amp;lt;BUBL 2011.0-rc1-g90833fe&amp;gt;''&lt;br /&gt;
* in the U-Boot environment on eMMC at absolute offset 0x5f000: ''baselineloader_version=BUBL 2011.0-rc1-g90833fe''&lt;br /&gt;
&lt;br /&gt;
This also gives an idea what the leading ''B'' could stands for - apparently ''baseline'' - whatever that means in this case ...&lt;br /&gt;
&lt;br /&gt;
BUBL completes the following [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L109 steps]:&lt;br /&gt;
&lt;br /&gt;
* setup PLL(s)&lt;br /&gt;
* setup timer(s)&lt;br /&gt;
* setup ADC&lt;br /&gt;
* setup DDR memory controller&lt;br /&gt;
* output (using UART0) various [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L44 pieces of information], determined via previously setup ADC (partially info the device bt_nexmed_hwmon.0 under Linux provides, too)&lt;br /&gt;
** board type (''BASI'')&lt;br /&gt;
** hardware version (''???'')&lt;br /&gt;
** boot device (''eMMC'')&lt;br /&gt;
** CPU frequency (''270'')&lt;br /&gt;
** RAM size (''??? MB'')&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
After these initial steps, BUBL [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L202 continues] with loading a binary blob from either NAND or eMMC into RAM. BUBL expects this binary blob to be a U-Boot binary.&lt;br /&gt;
&lt;br /&gt;
* if ADC value 4 says to boot from NAND (NOT the case on F454!)&lt;br /&gt;
** setup NAND interface&lt;br /&gt;
** read U-Boot from NAND (offset?, size?), into RAM at offset 0x81100000&lt;br /&gt;
* else&lt;br /&gt;
** setup MMC/SD interface&lt;br /&gt;
** read U-Boot from eMMC at offset 0x1000, size 256 KiB, into RAM at offset 0x81080000&lt;br /&gt;
&lt;br /&gt;
The binary blob loaded into RAM is checked for validity - if it is really a U-Boot binary (doubleword at offset 0x3c has to be 0xdeadbeef).&lt;br /&gt;
&lt;br /&gt;
If it is not U-Boot or if there is the character ''s'' received on UART0, BUBL discards any loaded binary blob and expects to [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L270 receive a S-record file] from UART0 instead. BUBL writes the received S-record file, translated to binary, into RAM at the offset determined from the S-record file.&lt;br /&gt;
&lt;br /&gt;
The last step is to either jump&lt;br /&gt;
&lt;br /&gt;
* to 0x81100000, in case of U-Boot from NAND  OR&lt;br /&gt;
* to 0x81080000, in case of U-Boot from eMMC  OR&lt;br /&gt;
* to the address determined from the receive S-record file.&lt;br /&gt;
&lt;br /&gt;
=== U-Boot ===&lt;br /&gt;
&lt;br /&gt;
The F454's user boot loader, BUBL, expects to load a U-Boot binary - via MMC/SD interface. It is expected to be 4 KiB into the F454's eMMC (offset 0x1000) and is assumed to be maximally 256 KiB in size.&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at the U-Boot environment (variable ''ver''), and also at the readable ASCII strings of the U-Boot binary, tells us what version of U-Boot is used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# fw_printenv | grep ^ver= | sed 's#^ver=##'&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
&lt;br /&gt;
root@basi:~# dd if=/dev/mmcblk0p1 bs=$((0xe00 + 0)) skip=1 count=$(((256 * 1024) / 0xe00)) 2&amp;gt;/dev/null | strings | grep -e 'U-Boot '&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
ubootver=U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
So it is obviously based on release candidate 2 for U-Boot 2010.12 . The Git commit hash, which follows ''-rc2-'' should tell us about the exact source code version.&lt;br /&gt;
&lt;br /&gt;
bticino published the source code on their [http://github.com/MyOpenCommunity MyOpenCommunity] site on [http://github.com GitHub]. It resides in a Git repository called http://github.com/MyOpenCommunity/u-boot-davinci-medium . As of this writing it's ''master'' branch of this repository is ahead by 3 newer commits. A link to the above mentioned commit hash is: [http://github.com/MyOpenCommunity/u-boot-davinci-medium/commit/3ed2d264ae41bbc05f961a8aececdd636cdb1582 3ed2d264ae41bbc05f961a8aececdd636cdb1582]. &lt;br /&gt;
&lt;br /&gt;
It turns out that this copy of U-Boot has been derived from:&lt;br /&gt;
&lt;br /&gt;
* arago-project.org [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=summary U-Boot for DaVinci], tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c DEV.DavinviBSP.03.01.01.38] (commit [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c 6ebeaa9])&lt;br /&gt;
* denx.de [http://www.denx.de/wiki/U-Boot/WebHome U-Boot], some commits after tag [http://git.denx.de/?p=u-boot.git;a=commit;h=d0d2271f8c62e830ec65fb069b6d12dd708e3e2f v2010.12-rc2] (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=f8689b f8689b])&lt;br /&gt;
&lt;br /&gt;
Note that arago-project.org does also have a tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=1af61f3b812b51f6f41ff37cd4a52ce6cfb21d7a DEV.DavinviBSP.03.01.01.39], which is currently equivalent to where the branch ''r39'' points to. And more interesting: this tag is just one single commit further than where tag DEV.DavinviBSP.03.01.01.38 points to.&lt;br /&gt;
&lt;br /&gt;
To avoid confusion: The [http://github.com/MyOpenCommunity MyOpenCommunity] also has a repository called [http://github.com/MyOpenCommunity/u-boot-davinci-medium-v2 u-boot-davinci-medium-v2]. This is newer version, based on denx.de's U-Boot (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=d41b3cc16fd97da23900f79e8fefdeedeebde8f6 d41b3cc]) - somewhere between versions [http://git.denx.de/?p=u-boot.git;a=commit;h=ebbf0d20aa85f623c49b7ed3349ebfea450c152d v2013.01-rc2] and [http://git.denx.de/?p=u-boot.git;a=commit;h=3ae7b240ad8c723d02aa79654220a07049b7ae4d v2013.01-rc1]. So later shipped F454 devices ''might'' have a U-Boot binary installed which is based on this newer source code base.&lt;br /&gt;
&lt;br /&gt;
==== Operation ====&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/version and /boot, while running F454 firmware version 1.00.37, suggest:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/version &lt;br /&gt;
Linux version 2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429 (bticino@medium1) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #1 PREEMPT Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
root@basi:~# ls -l /boot/&lt;br /&gt;
lrwxrwxrwx    1 root     root           66 Nov  8  2012 uImage -&amp;gt; uImage-2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the used [http://kernel.org Linux] kernel is apparently based on [http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tag/?h=linux-2.6.32.y&amp;amp;id=v2.6.32.17 version 2.6.32.17] within Git repository http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git .&lt;br /&gt;
&lt;br /&gt;
Furthermore, when we look at the kernel image file, called ''uImage'', which get's loaded by U-Boot on startup:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ unzip Firmware_F454_vers010037.zip&lt;br /&gt;
Archive:  Firmware_F454_vers010037.zip&lt;br /&gt;
  inflating: F454_010037.fwz&lt;br /&gt;
$ unzip -P F454  F454_010037.fwz&lt;br /&gt;
Archive:  F454_010037.fwz&lt;br /&gt;
  inflating: btweb_only.ext3.gz      &lt;br /&gt;
  inflating: btweb_only_recovery.ext3.gz  &lt;br /&gt;
  inflating: fwz.xml                 &lt;br /&gt;
  inflating: uImage&lt;br /&gt;
$ mkimage -l uImage &lt;br /&gt;
Image Name:   Arago/2.6.32.17-psp03.01.01.39/b&lt;br /&gt;
Created:      Thu Nov  8 17:02:33 2012&lt;br /&gt;
Image Type:   ARM Linux Kernel Image (uncompressed)&lt;br /&gt;
Data Size:    1720032 Bytes = 1679.72 kB = 1.64 MB&lt;br /&gt;
Load Address: 80008000&lt;br /&gt;
Entry Point:  80008000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We recognize 2 important hints within the ''Image Name'' of the uImage: ''Arago'' and the version amendment ''psp03.01.01.39''. Together with the amendment ''-davinci1'' seen within /proc/version, these 2 hints make a very strong suggestion that the used Linux kernel version is based on one managed by TI as part the [http://arago-project.org/ Arago project]: tag [http://arago-project.org/git/projects/?p=linux-davinci.git;a=commit;h=161e942bbb6e3603bccd1548865cfcce0910f1cc DEV.DaVinciPSP.03.01.01.39] within Git repository git://arago-project.org/git/projects/linux-davinci.git .&lt;br /&gt;
&lt;br /&gt;
All these assumption about on what version the used kernel is based on become certain facts after finding one of bticino's public Git repositories on [http://github.com GitHub]: http://github.com/MyOpenCommunity/linux-davinci-medium . It comprises the commit with the hash [http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429], which occurs in /proc/version as an amendment to the kernel version.&lt;br /&gt;
&lt;br /&gt;
Newer versions of the firmware apparently use slightly newer kernel versions/commits, which can also be found in the mentioned [http://github.com/MyOpenCommunity/linux-davinci-medium repository]. All these commits are part of a branch called [https://github.com/MyOpenCommunity/linux-davinci-medium/tree/f454_1 f454_1].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| compile stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| kernel version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| commit hash&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:16:09 CET 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/59f7438a4e85d0a2b1b985a65500a9f05366f6ce 59f7438a4e85d0a2b1b985a65500a9f05366f6ce]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep 4 18:03:59 CEST 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/f56c4d42a889cb71bd92d101e9e2b0e847ca1603 f56c4d42a889cb71bd92d101e9e2b0e847ca1603]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
Apparently all kernels include the set of configuration options used to compile them (CONFIG_IKCONFIG=y), because all kernel files have embedded gzip data blobs. To extract such a configuration file from a uImage like the ones found in firmware updates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# extract kernel image, (pure binary, arch/arm/boot/Image)&lt;br /&gt;
$ ZIO=$(binwalk uImage | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }'); \&lt;br /&gt;
	dd if=uImage bs=$ZIO skip=1 | gunzip &amp;gt;Image&lt;br /&gt;
# extract embedded config file&lt;br /&gt;
$ CGZO=$(binwalk Image | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }');&lt;br /&gt;
	dd if=Image bs=$CGZO skip=1 | gunzip &amp;gt;config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It turns out that all three different versions known so far do have exactly the same configuration. The only differences is the typical timestamp which is placed at the beginning of Linux kernel configuration files.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| time stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| md5sum&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:15:22 2014&lt;br /&gt;
|6973e72623f206073f9359035d076ae8&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep  4 18:03:13 2014&lt;br /&gt;
|3e3aaf37a4158eeb1e92417aa51bc16b&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following list shows some of the enabled features - '''''besides the expected ones''''' (support for the Davinci SoC and it's peripherals). Features, which might be surprising to see and/or which are most likely not really used by the current firmware:&lt;br /&gt;
&lt;br /&gt;
* core&lt;br /&gt;
**  Tickless System&lt;br /&gt;
**  Suspend to RAM and standby&lt;br /&gt;
* network&lt;br /&gt;
**  IPv4&lt;br /&gt;
***  in-kernel DHCP support&lt;br /&gt;
***  IPsec: transport, tunnel and BEET mode&lt;br /&gt;
**  IPv6 (module)&lt;br /&gt;
* drivers&lt;br /&gt;
**  loopback device (module)&lt;br /&gt;
**  TUN/TAP device (module)&lt;br /&gt;
**  PPP with async/sync serial support and deflate compression (modules)&lt;br /&gt;
**  network console logging&lt;br /&gt;
* filesystems&lt;br /&gt;
**  Dnotify and Inotify support&lt;br /&gt;
**  Kernel automounter v4 (module)&lt;br /&gt;
**  FAT&lt;br /&gt;
**  NFS v2 and v3&lt;br /&gt;
**  NFS v2 and v3 server (module)&lt;br /&gt;
**  SMB  (module)&lt;br /&gt;
&lt;br /&gt;
On an F454 running firmware version v1.00.37, the following modules are loaded:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# lsmod&lt;br /&gt;
Module                  Size  Used by&lt;br /&gt;
ipv6                  247137  16 &lt;br /&gt;
g_ether                27235  0 &lt;br /&gt;
musb_hdrc              28058  1 g_ether&lt;br /&gt;
dm365mmap               1955  0 &lt;br /&gt;
edmak                  12651  0 &lt;br /&gt;
irqk                    6411  0 &lt;br /&gt;
cmemk                  22327  0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of the above listed features, which are build as modules, just kernel level support for IPv6 is actually loaded. All other loaded modules are peripheral drivers.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=354</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=354"/>
		<updated>2015-02-25T21:26:41Z</updated>

		<summary type="html">&lt;p&gt;Joft: /* U-Boot */ Note on new bticino github repo, minor other changes ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Boot loader ==&lt;br /&gt;
&lt;br /&gt;
=== ARM ROM boot loader - RBL ===&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM processor starts with executing the ARM ''ROM boot loader'' (RBL), which most likely resides in an address space starting at 0x00018000. The RBL searches for a ''user boot loader'' (UBL). In case of the F454 the current assumption is that it does so via DM365's interface SPI0 - on an attached SPI EEPROM.&lt;br /&gt;
&lt;br /&gt;
The RBL specifically searches for a certain ''magic number'' (32 bit), which is 0xa1acedxx. At this point in time it remains a little bit unclear if this number has to be at offset 0x0 of the EEPROM (most likely) or if it can reside within a certain range of bytes/pages/whatever.&lt;br /&gt;
&lt;br /&gt;
The magic number must be followed by 20 bytes of additional information, like UBL executable entry point, size of the UBL, start and load addresses, flags ... TI's [http://www.ti.com/lit/pdf/sprufg5 DM36x User's Guide] has all the details, chapter 11.2.5, page 188.&lt;br /&gt;
&lt;br /&gt;
After having found this piece of information, the RBL acts accordingly: loads the UBL into the ARM's TCM RAM0 and RAM1 (2x 16 KiB, at address space offset 0x0000 and 0x4000 respectively) and jumps to the specified entry point.&lt;br /&gt;
&lt;br /&gt;
=== User boot loader - UBL ===&lt;br /&gt;
&lt;br /&gt;
The ''user boot loader'' (UBL) used by the F454 is called ''BUBL'' and its source code can be found on [https://gitorious.org/ gitorious.org] in repository called [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9: medium_platform/bubl].&lt;br /&gt;
&lt;br /&gt;
As of this writing, the latest commit has the hash [https://gitorious.org/medium_platform/bubl/commit/90833fe26b0c5a833054e939909fc887c94561d9 90833fe] . Apparently this is exactly the version used in the F454, since this commit hash can be found in 2 places on the F454 - at runtime (!):&lt;br /&gt;
&lt;br /&gt;
* in the ARM TCM RAM0 and RAM1 (offset 0x5dd4): ''&amp;lt;BUBL 2011.0-rc1-g90833fe&amp;gt;''&lt;br /&gt;
* in the U-Boot environment on eMMC at absolute offset 0x5f000: ''baselineloader_version=BUBL 2011.0-rc1-g90833fe''&lt;br /&gt;
&lt;br /&gt;
This also gives an idea what the leading ''B'' could stands for - apparently ''baseline'' - whatever that means in this case ...&lt;br /&gt;
&lt;br /&gt;
BUBL completes the following [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L109 steps]:&lt;br /&gt;
&lt;br /&gt;
* setup PLL(s)&lt;br /&gt;
* setup timer(s)&lt;br /&gt;
* setup ADC&lt;br /&gt;
* setup DDR memory controller&lt;br /&gt;
* output (using UART0) various [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L44 pieces of information], determined via previously setup ADC (partially info the device bt_nexmed_hwmon.0 under Linux provides, too)&lt;br /&gt;
** board type (''BASI'')&lt;br /&gt;
** hardware version (''???'')&lt;br /&gt;
** boot device (''eMMC'')&lt;br /&gt;
** CPU frequency (''270'')&lt;br /&gt;
** RAM size (''??? MB'')&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
After these initial steps, BUBL [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L202 continues] with loading a binary blob from either NAND or eMMC into RAM. BUBL expects this binary blob to be a U-Boot binary.&lt;br /&gt;
&lt;br /&gt;
* if ADC value 4 says to boot from NAND (NOT the case on F454!)&lt;br /&gt;
** setup NAND interface&lt;br /&gt;
** read U-Boot from NAND (offset?, size?), into RAM at offset 0x81100000&lt;br /&gt;
* else&lt;br /&gt;
** setup MMC/SD interface&lt;br /&gt;
** read U-Boot from eMMC at offset 0x1000, size 256 KiB, into RAM at offset 0x81080000&lt;br /&gt;
&lt;br /&gt;
The binary blob loaded into RAM is checked for validity - if it is really a U-Boot binary (doubleword at offset 0x3c has to be 0xdeadbeef).&lt;br /&gt;
&lt;br /&gt;
If it is not U-Boot or if there is the character ''s'' received on UART0, BUBL discards any loaded binary blob and expects to [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L270 receive a S-record file] from UART0 instead. BUBL writes the received S-record file, translated to binary, into RAM at the offset determined from the S-record file.&lt;br /&gt;
&lt;br /&gt;
The last step is to either jump&lt;br /&gt;
&lt;br /&gt;
* to 0x81100000, in case of U-Boot from NAND  OR&lt;br /&gt;
* to 0x81080000, in case of U-Boot from eMMC  OR&lt;br /&gt;
* to the address determined from the receive S-record file.&lt;br /&gt;
&lt;br /&gt;
=== U-Boot ===&lt;br /&gt;
&lt;br /&gt;
The F454's user boot loader, BUBL, expects to load a U-Boot binary - via MMC/SD interface. It is expected to be 4 KiB into the F454's eMMC (offset 0x1000) and is assumed to be maximally 256 KiB in size.&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at the U-Boot environment (variable ''ver''), and also at the readable ASCII strings of the U-Boot binary, tells us what version of U-Boot is used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# fw_printenv | grep ^ver= | sed 's#^ver=##'&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
So it is obviously based on release candidate 2 for U-Boot 2010.12 . The Git commit hash, which follows ''-rc2-'' should tell us about the exact source code version.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as of this writing, your author hasn't been able to find any public source repository, which does comprise a commit with this hash. However there is the very strong assumption that the source code the F454's U-Boot binary was built from is at least based on this [https://gitorious.org/ gitorious.org] repository: [https://gitorious.org/medium_platform/u-boot/source/f319d40632e77470d06d9d758633d106079eccf9: medium_platform/u-boot] .&lt;br /&gt;
&lt;br /&gt;
It turns out that this repository's ''master'' branch (commit [https://gitorious.org/medium_platform/u-boot/commits/f319d40632e77470d06d9d758633d106079eccf9 f319d40]) has been derived from:&lt;br /&gt;
&lt;br /&gt;
* arago-project.org [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=summary U-Boot for DaVinci], tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c DEV.DavinviBSP.03.01.01.38] (commit [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c 6ebeaa9])&lt;br /&gt;
* denx.de [http://www.denx.de/wiki/U-Boot/WebHome U-Boot], some commits after tag [http://git.denx.de/?p=u-boot.git;a=commit;h=d0d2271f8c62e830ec65fb069b6d12dd708e3e2f v2010.12-rc2] (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=f8689b f8689b])&lt;br /&gt;
&lt;br /&gt;
Note that arago-project.org does also have a tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=1af61f3b812b51f6f41ff37cd4a52ce6cfb21d7a DEV.DavinviBSP.03.01.01.39], which is currently equivalent to where the branch ''r39'' points to. And more interesting: this tag is just one single commit further than where tag DEV.DavinviBSP.03.01.01.38 points to.&lt;br /&gt;
&lt;br /&gt;
To avoid confusion: bticino's more recent online presence regarding Git repositories on [http://github.com GitHub], named [http://github.com/MyOpenCommunity MyOpenCommunity], has a repository called [http://github.com/MyOpenCommunity/u-boot-davinci-medium-v2 u-boot-davinci-medium-v2]. However this is newer version, based on denx.de's U-Boot (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=d41b3cc16fd97da23900f79e8fefdeedeebde8f6 d41b3cc]), which is somewhere between versions [http://git.denx.de/?p=u-boot.git;a=commit;h=ebbf0d20aa85f623c49b7ed3349ebfea450c152d v2013.01-rc2] and [http://git.denx.de/?p=u-boot.git;a=commit;h=3ae7b240ad8c723d02aa79654220a07049b7ae4d v2013.01-rc1] - and thus does '''not''' represent what is running on at least the F454 under investigation.&lt;br /&gt;
&lt;br /&gt;
==== Operation ====&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/version and /boot, while running F454 firmware version 1.00.37, suggest:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/version &lt;br /&gt;
Linux version 2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429 (bticino@medium1) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #1 PREEMPT Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
root@basi:~# ls -l /boot/&lt;br /&gt;
lrwxrwxrwx    1 root     root           66 Nov  8  2012 uImage -&amp;gt; uImage-2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the used [http://kernel.org Linux] kernel is apparently based on [http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tag/?h=linux-2.6.32.y&amp;amp;id=v2.6.32.17 version 2.6.32.17] within Git repository http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git .&lt;br /&gt;
&lt;br /&gt;
Furthermore, when we look at the kernel image file, called ''uImage'', which get's loaded by U-Boot on startup:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ unzip Firmware_F454_vers010037.zip&lt;br /&gt;
Archive:  Firmware_F454_vers010037.zip&lt;br /&gt;
  inflating: F454_010037.fwz&lt;br /&gt;
$ unzip -P F454  F454_010037.fwz&lt;br /&gt;
Archive:  F454_010037.fwz&lt;br /&gt;
  inflating: btweb_only.ext3.gz      &lt;br /&gt;
  inflating: btweb_only_recovery.ext3.gz  &lt;br /&gt;
  inflating: fwz.xml                 &lt;br /&gt;
  inflating: uImage&lt;br /&gt;
$ mkimage -l uImage &lt;br /&gt;
Image Name:   Arago/2.6.32.17-psp03.01.01.39/b&lt;br /&gt;
Created:      Thu Nov  8 17:02:33 2012&lt;br /&gt;
Image Type:   ARM Linux Kernel Image (uncompressed)&lt;br /&gt;
Data Size:    1720032 Bytes = 1679.72 kB = 1.64 MB&lt;br /&gt;
Load Address: 80008000&lt;br /&gt;
Entry Point:  80008000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We recognize 2 important hints within the ''Image Name'' of the uImage: ''Arago'' and the version amendment ''psp03.01.01.39''. Together with the amendment ''-davinci1'' seen within /proc/version, these 2 hints make a very strong suggestion that the used Linux kernel version is based on one managed by TI as part the [http://arago-project.org/ Arago project]: tag [http://arago-project.org/git/projects/?p=linux-davinci.git;a=commit;h=161e942bbb6e3603bccd1548865cfcce0910f1cc DEV.DaVinciPSP.03.01.01.39] within Git repository git://arago-project.org/git/projects/linux-davinci.git .&lt;br /&gt;
&lt;br /&gt;
All these assumption about on what version the used kernel is based on become certain facts after finding one of bticino's public Git repositories on [http://github.com GitHub]: http://github.com/MyOpenCommunity/linux-davinci-medium . It comprises the commit with the hash [http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429], which occurs in /proc/version as an amendment to the kernel version.&lt;br /&gt;
&lt;br /&gt;
Newer versions of the firmware apparently use slightly newer kernel versions/commits, which can also be found in the mentioned [http://github.com/MyOpenCommunity/linux-davinci-medium repository]. All these commits are part of a branch called [https://github.com/MyOpenCommunity/linux-davinci-medium/tree/f454_1 f454_1].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| compile stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| kernel version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| commit hash&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:16:09 CET 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/59f7438a4e85d0a2b1b985a65500a9f05366f6ce 59f7438a4e85d0a2b1b985a65500a9f05366f6ce]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep 4 18:03:59 CEST 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/f56c4d42a889cb71bd92d101e9e2b0e847ca1603 f56c4d42a889cb71bd92d101e9e2b0e847ca1603]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
Apparently all kernels include the set of configuration options used to compile them (CONFIG_IKCONFIG=y), because all kernel files have embedded gzip data blobs. To extract such a configuration file from a uImage like the ones found in firmware updates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# extract kernel image, (pure binary, arch/arm/boot/Image)&lt;br /&gt;
$ ZIO=$(binwalk uImage | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }'); \&lt;br /&gt;
	dd if=uImage bs=$ZIO skip=1 | gunzip &amp;gt;Image&lt;br /&gt;
# extract embedded config file&lt;br /&gt;
$ CGZO=$(binwalk Image | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }');&lt;br /&gt;
	dd if=Image bs=$CGZO skip=1 | gunzip &amp;gt;config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It turns out that all three different versions known so far do have exactly the same configuration. The only differences is the typical timestamp which is placed at the beginning of Linux kernel configuration files.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| time stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| md5sum&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:15:22 2014&lt;br /&gt;
|6973e72623f206073f9359035d076ae8&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep  4 18:03:13 2014&lt;br /&gt;
|3e3aaf37a4158eeb1e92417aa51bc16b&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following list shows some of the enabled features - '''''besides the expected ones''''' (support for the Davinci SoC and it's peripherals). Features, which might be surprising to see and/or which are most likely not really used by the current firmware:&lt;br /&gt;
&lt;br /&gt;
* core&lt;br /&gt;
**  Tickless System&lt;br /&gt;
**  Suspend to RAM and standby&lt;br /&gt;
* network&lt;br /&gt;
**  IPv4&lt;br /&gt;
***  in-kernel DHCP support&lt;br /&gt;
***  IPsec: transport, tunnel and BEET mode&lt;br /&gt;
**  IPv6 (module)&lt;br /&gt;
* drivers&lt;br /&gt;
**  loopback device (module)&lt;br /&gt;
**  TUN/TAP device (module)&lt;br /&gt;
**  PPP with async/sync serial support and deflate compression (modules)&lt;br /&gt;
**  network console logging&lt;br /&gt;
* filesystems&lt;br /&gt;
**  Dnotify and Inotify support&lt;br /&gt;
**  Kernel automounter v4 (module)&lt;br /&gt;
**  FAT&lt;br /&gt;
**  NFS v2 and v3&lt;br /&gt;
**  NFS v2 and v3 server (module)&lt;br /&gt;
**  SMB  (module)&lt;br /&gt;
&lt;br /&gt;
On an F454 running firmware version v1.00.37, the following modules are loaded:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# lsmod&lt;br /&gt;
Module                  Size  Used by&lt;br /&gt;
ipv6                  247137  16 &lt;br /&gt;
g_ether                27235  0 &lt;br /&gt;
musb_hdrc              28058  1 g_ether&lt;br /&gt;
dm365mmap               1955  0 &lt;br /&gt;
edmak                  12651  0 &lt;br /&gt;
irqk                    6411  0 &lt;br /&gt;
cmemk                  22327  0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of the above listed features, which are build as modules, just kernel level support for IPv6 is actually loaded. All other loaded modules are peripheral drivers.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=353</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=353"/>
		<updated>2015-02-25T20:45:45Z</updated>

		<summary type="html">&lt;p&gt;Joft: /* Origin */ Update and add further links to kernel source tree on github.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Boot loader ==&lt;br /&gt;
&lt;br /&gt;
=== ARM ROM boot loader - RBL ===&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM processor starts with executing the ARM ''ROM boot loader'' (RBL), which most likely resides in an address space starting at 0x00018000. The RBL searches for a ''user boot loader'' (UBL). In case of the F454 the current assumption is that it does so via DM365's interface SPI0 - on an attached SPI EEPROM.&lt;br /&gt;
&lt;br /&gt;
The RBL specifically searches for a certain ''magic number'' (32 bit), which is 0xa1acedxx. At this point in time it remains a little bit unclear if this number has to be at offset 0x0 of the EEPROM (most likely) or if it can reside within a certain range of bytes/pages/whatever.&lt;br /&gt;
&lt;br /&gt;
The magic number must be followed by 20 bytes of additional information, like UBL executable entry point, size of the UBL, start and load addresses, flags ... TI's [http://www.ti.com/lit/pdf/sprufg5 DM36x User's Guide] has all the details, chapter 11.2.5, page 188.&lt;br /&gt;
&lt;br /&gt;
After having found this piece of information, the RBL acts accordingly: loads the UBL into the ARM's TCM RAM0 and RAM1 (2x 16 KiB, at address space offset 0x0000 and 0x4000 respectively) and jumps to the specified entry point.&lt;br /&gt;
&lt;br /&gt;
=== User boot loader - UBL ===&lt;br /&gt;
&lt;br /&gt;
The ''user boot loader'' (UBL) used by the F454 is called ''BUBL'' and its source code can be found on [https://gitorious.org/ gitorious.org] in repository called [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9: medium_platform/bubl].&lt;br /&gt;
&lt;br /&gt;
As of this writing, the latest commit has the hash [https://gitorious.org/medium_platform/bubl/commit/90833fe26b0c5a833054e939909fc887c94561d9 90833fe] . Apparently this is exactly the version used in the F454, since this commit hash can be found in 2 places on the F454 - at runtime (!):&lt;br /&gt;
&lt;br /&gt;
* in the ARM TCM RAM0 and RAM1 (offset 0x5dd4): ''&amp;lt;BUBL 2011.0-rc1-g90833fe&amp;gt;''&lt;br /&gt;
* in the U-Boot environment on eMMC at absolute offset 0x5f000: ''baselineloader_version=BUBL 2011.0-rc1-g90833fe''&lt;br /&gt;
&lt;br /&gt;
This also gives an idea what the leading ''B'' could stands for - apparently ''baseline'' - whatever that means in this case ...&lt;br /&gt;
&lt;br /&gt;
BUBL completes the following [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L109 steps]:&lt;br /&gt;
&lt;br /&gt;
* setup PLL(s)&lt;br /&gt;
* setup timer(s)&lt;br /&gt;
* setup ADC&lt;br /&gt;
* setup DDR memory controller&lt;br /&gt;
* output (using UART0) various [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L44 pieces of information], determined via previously setup ADC (partially info the device bt_nexmed_hwmon.0 under Linux provides, too)&lt;br /&gt;
** board type (''BASI'')&lt;br /&gt;
** hardware version (''???'')&lt;br /&gt;
** boot device (''eMMC'')&lt;br /&gt;
** CPU frequency (''270'')&lt;br /&gt;
** RAM size (''??? MB'')&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
After these initial steps, BUBL [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L202 continues] with loading a binary blob from either NAND or eMMC into RAM. BUBL expects this binary blob to be a U-Boot binary.&lt;br /&gt;
&lt;br /&gt;
* if ADC value 4 says to boot from NAND (NOT the case on F454!)&lt;br /&gt;
** setup NAND interface&lt;br /&gt;
** read U-Boot from NAND (offset?, size?), into RAM at offset 0x81100000&lt;br /&gt;
* else&lt;br /&gt;
** setup MMC/SD interface&lt;br /&gt;
** read U-Boot from eMMC at offset 0x1000, size 256 KiB, into RAM at offset 0x81080000&lt;br /&gt;
&lt;br /&gt;
The binary blob loaded into RAM is checked for validity - if it is really a U-Boot binary (doubleword at offset 0x3c has to be 0xdeadbeef).&lt;br /&gt;
&lt;br /&gt;
If it is not U-Boot or if there is the character ''s'' received on UART0, BUBL discards any loaded binary blob and expects to [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L270 receive a S-record file] from UART0 instead. BUBL writes the received S-record file, translated to binary, into RAM at the offset determined from the S-record file.&lt;br /&gt;
&lt;br /&gt;
The last step is to either jump&lt;br /&gt;
&lt;br /&gt;
* to 0x81100000, in case of U-Boot from NAND  OR&lt;br /&gt;
* to 0x81080000, in case of U-Boot from eMMC  OR&lt;br /&gt;
* to the address determined from the receive S-record file.&lt;br /&gt;
&lt;br /&gt;
=== U-Boot ===&lt;br /&gt;
&lt;br /&gt;
The F454's user boot loader, BUBL, expects to load a U-Boot binary - via MMC/SD interface. It is expected to be 4 KiB into the F454's eMMC (offset 0x1000) and is assumed to be maximally 256 KiB in size.&lt;br /&gt;
&lt;br /&gt;
A look at the U-Boot environment (variable ''ver''), and also at the readable ASCII strings of the U-Boot binary, tells us what version of U-Boot is used:&lt;br /&gt;
&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
&lt;br /&gt;
So it is obviously based on release candidate 2 for U-Boot 2010.12 . The Git commit hash, which follows ''-rc2-'' should tell us about the exact source code version.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as of this writing, your author hasn't been able to find any public source repository, which does comprise a commit with this hash. However there is the very strong assumption that the source code the F454's U-Boot binary was built from is at least based on this [https://gitorious.org/ gitorious.org] repository: [https://gitorious.org/medium_platform/u-boot/source/f319d40632e77470d06d9d758633d106079eccf9: medium_platform/u-boot] .&lt;br /&gt;
&lt;br /&gt;
It turns out that this repository's ''master'' branch (commit [https://gitorious.org/medium_platform/u-boot/commits/f319d40632e77470d06d9d758633d106079eccf9 f319d40]) has been derived from:&lt;br /&gt;
&lt;br /&gt;
* arago-project.org [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=summary U-Boot for DaVinci], tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c DEV.DavinviBSP.03.01.01.38] (commit [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c 6ebeaa9])&lt;br /&gt;
* denx.de [http://www.denx.de/wiki/U-Boot/WebHome U-Boot], some commits after tag [http://git.denx.de/?p=u-boot.git;a=commit;h=d0d2271f8c62e830ec65fb069b6d12dd708e3e2f v2010.12-rc2] (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=f8689b f8689b])&lt;br /&gt;
&lt;br /&gt;
Note that arago-project.org does also have a tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=1af61f3b812b51f6f41ff37cd4a52ce6cfb21d7a DEV.DavinviBSP.03.01.01.39], which is currently equivalent to where the branch ''r39'' points to. And more interesting: this tag is just one single commit further than where tag DEV.DavinviBSP.03.01.01.38 points to.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/version and /boot, while running F454 firmware version 1.00.37, suggest:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/version &lt;br /&gt;
Linux version 2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429 (bticino@medium1) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #1 PREEMPT Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
root@basi:~# ls -l /boot/&lt;br /&gt;
lrwxrwxrwx    1 root     root           66 Nov  8  2012 uImage -&amp;gt; uImage-2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the used [http://kernel.org Linux] kernel is apparently based on [http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tag/?h=linux-2.6.32.y&amp;amp;id=v2.6.32.17 version 2.6.32.17] within Git repository http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git .&lt;br /&gt;
&lt;br /&gt;
Furthermore, when we look at the kernel image file, called ''uImage'', which get's loaded by U-Boot on startup:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ unzip Firmware_F454_vers010037.zip&lt;br /&gt;
Archive:  Firmware_F454_vers010037.zip&lt;br /&gt;
  inflating: F454_010037.fwz&lt;br /&gt;
$ unzip -P F454  F454_010037.fwz&lt;br /&gt;
Archive:  F454_010037.fwz&lt;br /&gt;
  inflating: btweb_only.ext3.gz      &lt;br /&gt;
  inflating: btweb_only_recovery.ext3.gz  &lt;br /&gt;
  inflating: fwz.xml                 &lt;br /&gt;
  inflating: uImage&lt;br /&gt;
$ mkimage -l uImage &lt;br /&gt;
Image Name:   Arago/2.6.32.17-psp03.01.01.39/b&lt;br /&gt;
Created:      Thu Nov  8 17:02:33 2012&lt;br /&gt;
Image Type:   ARM Linux Kernel Image (uncompressed)&lt;br /&gt;
Data Size:    1720032 Bytes = 1679.72 kB = 1.64 MB&lt;br /&gt;
Load Address: 80008000&lt;br /&gt;
Entry Point:  80008000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We recognize 2 important hints within the ''Image Name'' of the uImage: ''Arago'' and the version amendment ''psp03.01.01.39''. Together with the amendment ''-davinci1'' seen within /proc/version, these 2 hints make a very strong suggestion that the used Linux kernel version is based on one managed by TI as part the [http://arago-project.org/ Arago project]: tag [http://arago-project.org/git/projects/?p=linux-davinci.git;a=commit;h=161e942bbb6e3603bccd1548865cfcce0910f1cc DEV.DaVinciPSP.03.01.01.39] within Git repository git://arago-project.org/git/projects/linux-davinci.git .&lt;br /&gt;
&lt;br /&gt;
All these assumption about on what version the used kernel is based on become certain facts after finding one of bticino's public Git repositories on [http://github.com GitHub]: http://github.com/MyOpenCommunity/linux-davinci-medium . It comprises the commit with the hash [http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429], which occurs in /proc/version as an amendment to the kernel version.&lt;br /&gt;
&lt;br /&gt;
Newer versions of the firmware apparently use slightly newer kernel versions/commits, which can also be found in the mentioned [http://github.com/MyOpenCommunity/linux-davinci-medium repository]. All these commits are part of a branch called [https://github.com/MyOpenCommunity/linux-davinci-medium/tree/f454_1 f454_1].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| compile stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| kernel version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| commit hash&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:16:09 CET 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/59f7438a4e85d0a2b1b985a65500a9f05366f6ce 59f7438a4e85d0a2b1b985a65500a9f05366f6ce]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep 4 18:03:59 CEST 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://github.com/MyOpenCommunity/linux-davinci-medium/commit/f56c4d42a889cb71bd92d101e9e2b0e847ca1603 f56c4d42a889cb71bd92d101e9e2b0e847ca1603]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
Apparently all kernels include the set of configuration options used to compile them (CONFIG_IKCONFIG=y), because all kernel files have embedded gzip data blobs. To extract such a configuration file from a uImage like the ones found in firmware updates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# extract kernel image, (pure binary, arch/arm/boot/Image)&lt;br /&gt;
$ ZIO=$(binwalk uImage | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }'); \&lt;br /&gt;
	dd if=uImage bs=$ZIO skip=1 | gunzip &amp;gt;Image&lt;br /&gt;
# extract embedded config file&lt;br /&gt;
$ CGZO=$(binwalk Image | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }');&lt;br /&gt;
	dd if=Image bs=$CGZO skip=1 | gunzip &amp;gt;config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It turns out that all three different versions known so far do have exactly the same configuration. The only differences is the typical timestamp which is placed at the beginning of Linux kernel configuration files.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| time stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| md5sum&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:15:22 2014&lt;br /&gt;
|6973e72623f206073f9359035d076ae8&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep  4 18:03:13 2014&lt;br /&gt;
|3e3aaf37a4158eeb1e92417aa51bc16b&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following list shows some of the enabled features - '''''besides the expected ones''''' (support for the Davinci SoC and it's peripherals). Features, which might be surprising to see and/or which are most likely not really used by the current firmware:&lt;br /&gt;
&lt;br /&gt;
* core&lt;br /&gt;
**  Tickless System&lt;br /&gt;
**  Suspend to RAM and standby&lt;br /&gt;
* network&lt;br /&gt;
**  IPv4&lt;br /&gt;
***  in-kernel DHCP support&lt;br /&gt;
***  IPsec: transport, tunnel and BEET mode&lt;br /&gt;
**  IPv6 (module)&lt;br /&gt;
* drivers&lt;br /&gt;
**  loopback device (module)&lt;br /&gt;
**  TUN/TAP device (module)&lt;br /&gt;
**  PPP with async/sync serial support and deflate compression (modules)&lt;br /&gt;
**  network console logging&lt;br /&gt;
* filesystems&lt;br /&gt;
**  Dnotify and Inotify support&lt;br /&gt;
**  Kernel automounter v4 (module)&lt;br /&gt;
**  FAT&lt;br /&gt;
**  NFS v2 and v3&lt;br /&gt;
**  NFS v2 and v3 server (module)&lt;br /&gt;
**  SMB  (module)&lt;br /&gt;
&lt;br /&gt;
On an F454 running firmware version v1.00.37, the following modules are loaded:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# lsmod&lt;br /&gt;
Module                  Size  Used by&lt;br /&gt;
ipv6                  247137  16 &lt;br /&gt;
g_ether                27235  0 &lt;br /&gt;
musb_hdrc              28058  1 g_ether&lt;br /&gt;
dm365mmap               1955  0 &lt;br /&gt;
edmak                  12651  0 &lt;br /&gt;
irqk                    6411  0 &lt;br /&gt;
cmemk                  22327  0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of the above listed features, which are build as modules, just kernel level support for IPv6 is actually loaded. All other loaded modules are peripheral drivers.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=352</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=352"/>
		<updated>2015-02-18T22:21:28Z</updated>

		<summary type="html">&lt;p&gt;Joft: /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Boot loader ==&lt;br /&gt;
&lt;br /&gt;
=== ARM ROM boot loader - RBL ===&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM processor starts with executing the ARM ''ROM boot loader'' (RBL), which most likely resides in an address space starting at 0x00018000. The RBL searches for a ''user boot loader'' (UBL). In case of the F454 the current assumption is that it does so via DM365's interface SPI0 - on an attached SPI EEPROM.&lt;br /&gt;
&lt;br /&gt;
The RBL specifically searches for a certain ''magic number'' (32 bit), which is 0xa1acedxx. At this point in time it remains a little bit unclear if this number has to be at offset 0x0 of the EEPROM (most likely) or if it can reside within a certain range of bytes/pages/whatever.&lt;br /&gt;
&lt;br /&gt;
The magic number must be followed by 20 bytes of additional information, like UBL executable entry point, size of the UBL, start and load addresses, flags ... TI's [http://www.ti.com/lit/pdf/sprufg5 DM36x User's Guide] has all the details, chapter 11.2.5, page 188.&lt;br /&gt;
&lt;br /&gt;
After having found this piece of information, the RBL acts accordingly: loads the UBL into the ARM's TCM RAM0 and RAM1 (2x 16 KiB, at address space offset 0x0000 and 0x4000 respectively) and jumps to the specified entry point.&lt;br /&gt;
&lt;br /&gt;
=== User boot loader - UBL ===&lt;br /&gt;
&lt;br /&gt;
The ''user boot loader'' (UBL) used by the F454 is called ''BUBL'' and its source code can be found on [https://gitorious.org/ gitorious.org] in repository called [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9: medium_platform/bubl].&lt;br /&gt;
&lt;br /&gt;
As of this writing, the latest commit has the hash [https://gitorious.org/medium_platform/bubl/commit/90833fe26b0c5a833054e939909fc887c94561d9 90833fe] . Apparently this is exactly the version used in the F454, since this commit hash can be found in 2 places on the F454 - at runtime (!):&lt;br /&gt;
&lt;br /&gt;
* in the ARM TCM RAM0 and RAM1 (offset 0x5dd4): ''&amp;lt;BUBL 2011.0-rc1-g90833fe&amp;gt;''&lt;br /&gt;
* in the U-Boot environment on eMMC at absolute offset 0x5f000: ''baselineloader_version=BUBL 2011.0-rc1-g90833fe''&lt;br /&gt;
&lt;br /&gt;
This also gives an idea what the leading ''B'' could stands for - apparently ''baseline'' - whatever that means in this case ...&lt;br /&gt;
&lt;br /&gt;
BUBL completes the following [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L109 steps]:&lt;br /&gt;
&lt;br /&gt;
* setup PLL(s)&lt;br /&gt;
* setup timer(s)&lt;br /&gt;
* setup ADC&lt;br /&gt;
* setup DDR memory controller&lt;br /&gt;
* output (using UART0) various [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L44 pieces of information], determined via previously setup ADC (partially info the device bt_nexmed_hwmon.0 under Linux provides, too)&lt;br /&gt;
** board type (''BASI'')&lt;br /&gt;
** hardware version (''???'')&lt;br /&gt;
** boot device (''eMMC'')&lt;br /&gt;
** CPU frequency (''270'')&lt;br /&gt;
** RAM size (''??? MB'')&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
After these initial steps, BUBL [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L202 continues] with loading a binary blob from either NAND or eMMC into RAM. BUBL expects this binary blob to be a U-Boot binary.&lt;br /&gt;
&lt;br /&gt;
* if ADC value 4 says to boot from NAND (NOT the case on F454!)&lt;br /&gt;
** setup NAND interface&lt;br /&gt;
** read U-Boot from NAND (offset?, size?), into RAM at offset 0x81100000&lt;br /&gt;
* else&lt;br /&gt;
** setup MMC/SD interface&lt;br /&gt;
** read U-Boot from eMMC at offset 0x1000, size 256 KiB, into RAM at offset 0x81080000&lt;br /&gt;
&lt;br /&gt;
The binary blob loaded into RAM is checked for validity - if it is really a U-Boot binary (doubleword at offset 0x3c has to be 0xdeadbeef).&lt;br /&gt;
&lt;br /&gt;
If it is not U-Boot or if there is the character ''s'' received on UART0, BUBL discards any loaded binary blob and expects to [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L270 receive a S-record file] from UART0 instead. BUBL writes the received S-record file, translated to binary, into RAM at the offset determined from the S-record file.&lt;br /&gt;
&lt;br /&gt;
The last step is to either jump&lt;br /&gt;
&lt;br /&gt;
* to 0x81100000, in case of U-Boot from NAND  OR&lt;br /&gt;
* to 0x81080000, in case of U-Boot from eMMC  OR&lt;br /&gt;
* to the address determined from the receive S-record file.&lt;br /&gt;
&lt;br /&gt;
=== U-Boot ===&lt;br /&gt;
&lt;br /&gt;
The F454's user boot loader, BUBL, expects to load a U-Boot binary - via MMC/SD interface. It is expected to be 4 KiB into the F454's eMMC (offset 0x1000) and is assumed to be maximally 256 KiB in size.&lt;br /&gt;
&lt;br /&gt;
A look at the U-Boot environment (variable ''ver''), and also at the readable ASCII strings of the U-Boot binary, tells us what version of U-Boot is used:&lt;br /&gt;
&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
&lt;br /&gt;
So it is obviously based on release candidate 2 for U-Boot 2010.12 . The Git commit hash, which follows ''-rc2-'' should tell us about the exact source code version.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as of this writing, your author hasn't been able to find any public source repository, which does comprise a commit with this hash. However there is the very strong assumption that the source code the F454's U-Boot binary was built from is at least based on this [https://gitorious.org/ gitorious.org] repository: [https://gitorious.org/medium_platform/u-boot/source/f319d40632e77470d06d9d758633d106079eccf9: medium_platform/u-boot] .&lt;br /&gt;
&lt;br /&gt;
It turns out that this repository's ''master'' branch (commit [https://gitorious.org/medium_platform/u-boot/commits/f319d40632e77470d06d9d758633d106079eccf9 f319d40]) has been derived from:&lt;br /&gt;
&lt;br /&gt;
* arago-project.org [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=summary U-Boot for DaVinci], tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c DEV.DavinviBSP.03.01.01.38] (commit [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c 6ebeaa9])&lt;br /&gt;
* denx.de [http://www.denx.de/wiki/U-Boot/WebHome U-Boot], some commits after tag [http://git.denx.de/?p=u-boot.git;a=commit;h=d0d2271f8c62e830ec65fb069b6d12dd708e3e2f v2010.12-rc2] (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=f8689b f8689b])&lt;br /&gt;
&lt;br /&gt;
Note that arago-project.org does also have a tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=1af61f3b812b51f6f41ff37cd4a52ce6cfb21d7a DEV.DavinviBSP.03.01.01.39], which is currently equivalent to where the branch ''r39'' points to. And more interesting: this tag is just one single commit further than where tag DEV.DavinviBSP.03.01.01.38 points to.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/version and /boot, while running F454 firmware version 1.00.37, suggest:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/version &lt;br /&gt;
Linux version 2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429 (bticino@medium1) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #1 PREEMPT Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
root@basi:~# ls -l /boot/&lt;br /&gt;
lrwxrwxrwx    1 root     root           66 Nov  8  2012 uImage -&amp;gt; uImage-2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the used [http://kernel.org Linux] kernel is apparently based on [http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tag/?h=linux-2.6.32.y&amp;amp;id=v2.6.32.17 version 2.6.32.17] within Git repository http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git .&lt;br /&gt;
&lt;br /&gt;
Furthermore, when we look at the kernel image file, called ''uImage'', which get's loaded by U-Boot on startup:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ unzip Firmware_F454_vers010037.zip&lt;br /&gt;
Archive:  Firmware_F454_vers010037.zip&lt;br /&gt;
  inflating: F454_010037.fwz&lt;br /&gt;
$ unzip -P F454  F454_010037.fwz&lt;br /&gt;
Archive:  F454_010037.fwz&lt;br /&gt;
  inflating: btweb_only.ext3.gz      &lt;br /&gt;
  inflating: btweb_only_recovery.ext3.gz  &lt;br /&gt;
  inflating: fwz.xml                 &lt;br /&gt;
  inflating: uImage&lt;br /&gt;
$ mkimage -l uImage &lt;br /&gt;
Image Name:   Arago/2.6.32.17-psp03.01.01.39/b&lt;br /&gt;
Created:      Thu Nov  8 17:02:33 2012&lt;br /&gt;
Image Type:   ARM Linux Kernel Image (uncompressed)&lt;br /&gt;
Data Size:    1720032 Bytes = 1679.72 kB = 1.64 MB&lt;br /&gt;
Load Address: 80008000&lt;br /&gt;
Entry Point:  80008000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We recognize 2 important hints within the ''Image Name'' of the uImage: ''Arago'' and the version amendment ''psp03.01.01.39''. Together with the amendment ''-davinci1'' seen within /proc/version, these 2 hints make a very strong suggestion that the used Linux kernel version is based on one managed by TI as part the [http://arago-project.org/ Arago project]: tag [http://arago-project.org/git/projects/?p=linux-davinci.git;a=commit;h=161e942bbb6e3603bccd1548865cfcce0910f1cc DEV.DaVinciPSP.03.01.01.39] within Git repository git://arago-project.org/git/projects/linux-davinci.git .&lt;br /&gt;
&lt;br /&gt;
All these assumption about on what version the used kernel is based on become certain facts after finding one of bticino's public Git repositories on [http://gitorious.org gitorious.org]: http://gitorious.org/medium_platform/linux . It comprises the commit with the hash [http://gitorious.org/medium_platform/linux/commits/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429], which occurs in /proc/version as an amendment to the kernel version.&lt;br /&gt;
&lt;br /&gt;
Newer versions of the firmware apparently use slightly newer kernel versions/commits. However the commit hashes of the newer versions were not yet found in any public repository.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| compile stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| kernel version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| commit hash&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://gitorious.org/medium_platform/linux/commits/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://gitorious.org/medium_platform/linux/commits/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:16:09 CET 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|59f7438a4e85d0a2b1b985a65500a9f05366f6ce&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep 4 18:03:59 CEST 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|f56c4d42a889cb71bd92d101e9e2b0e847ca1603&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
Apparently all kernels include the set of configuration options used to compile them (CONFIG_IKCONFIG=y), because all kernel files have embedded gzip data blobs. To extract such a configuration file from a uImage like the ones found in firmware updates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# extract kernel image, (pure binary, arch/arm/boot/Image)&lt;br /&gt;
$ ZIO=$(binwalk uImage | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }'); \&lt;br /&gt;
	dd if=uImage bs=$ZIO skip=1 | gunzip &amp;gt;Image&lt;br /&gt;
# extract embedded config file&lt;br /&gt;
$ CGZO=$(binwalk Image | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }');&lt;br /&gt;
	dd if=Image bs=$CGZO skip=1 | gunzip &amp;gt;config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It turns out that all three different versions known so far do have exactly the same configuration. The only differences is the typical timestamp which is placed at the beginning of Linux kernel configuration files.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| time stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| md5sum&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:15:22 2014&lt;br /&gt;
|6973e72623f206073f9359035d076ae8&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep  4 18:03:13 2014&lt;br /&gt;
|3e3aaf37a4158eeb1e92417aa51bc16b&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following list shows some of the enabled features - '''''besides the expected ones''''' (support for the Davinci SoC and it's peripherals). Features, which might be surprising to see and/or which are most likely not really used by the current firmware:&lt;br /&gt;
&lt;br /&gt;
* core&lt;br /&gt;
**  Tickless System&lt;br /&gt;
**  Suspend to RAM and standby&lt;br /&gt;
* network&lt;br /&gt;
**  IPv4&lt;br /&gt;
***  in-kernel DHCP support&lt;br /&gt;
***  IPsec: transport, tunnel and BEET mode&lt;br /&gt;
**  IPv6 (module)&lt;br /&gt;
* drivers&lt;br /&gt;
**  loopback device (module)&lt;br /&gt;
**  TUN/TAP device (module)&lt;br /&gt;
**  PPP with async/sync serial support and deflate compression (modules)&lt;br /&gt;
**  network console logging&lt;br /&gt;
* filesystems&lt;br /&gt;
**  Dnotify and Inotify support&lt;br /&gt;
**  Kernel automounter v4 (module)&lt;br /&gt;
**  FAT&lt;br /&gt;
**  NFS v2 and v3&lt;br /&gt;
**  NFS v2 and v3 server (module)&lt;br /&gt;
**  SMB  (module)&lt;br /&gt;
&lt;br /&gt;
On an F454 running firmware version v1.00.37, the following modules are loaded:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# lsmod&lt;br /&gt;
Module                  Size  Used by&lt;br /&gt;
ipv6                  247137  16 &lt;br /&gt;
g_ether                27235  0 &lt;br /&gt;
musb_hdrc              28058  1 g_ether&lt;br /&gt;
dm365mmap               1955  0 &lt;br /&gt;
edmak                  12651  0 &lt;br /&gt;
irqk                    6411  0 &lt;br /&gt;
cmemk                  22327  0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of the above listed features, which are build as modules, just kernel level support for IPv6 is actually loaded. All other loaded modules are peripheral drivers.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=351</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=351"/>
		<updated>2015-02-18T22:14:35Z</updated>

		<summary type="html">&lt;p&gt;Joft: /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Boot loader ==&lt;br /&gt;
&lt;br /&gt;
=== ARM ROM boot loader - RBL ===&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM processor starts with executing the ARM ''ROM boot loader'' (RBL), which most likely resides in an address space starting at 0x00018000. The RBL searches for a ''user boot loader'' (UBL). In case of the F454 the current assumption is that it does so via DM365's interface SPI0 - on an attached SPI EEPROM.&lt;br /&gt;
&lt;br /&gt;
The RBL specifically searches for a certain ''magic number'' (32 bit), which is 0xa1acedxx. At this point in time it remains a little bit unclear if this number has to be at offset 0x0 of the EEPROM (most likely) or if it can reside within a certain range of bytes/pages/whatever.&lt;br /&gt;
&lt;br /&gt;
The magic number must be followed by 20 bytes of additional information, like UBL executable entry point, size of the UBL, start and load addresses, flags ... TI's [http://www.ti.com/lit/pdf/sprufg5 DM36x User's Guide] has all the details, chapter 11.2.5, page 188.&lt;br /&gt;
&lt;br /&gt;
After having found this piece of information, the RBL acts accordingly: loads the UBL into the ARM's TCM RAM0 and RAM1 (2x 16 KiB, at address space offset 0x0000 and 0x4000 respectively) and jumps to the specified entry point.&lt;br /&gt;
&lt;br /&gt;
=== User boot loader - UBL ===&lt;br /&gt;
&lt;br /&gt;
The ''user boot loader'' (UBL) used by the F454 is called ''BUBL'' and its source code can be found on [https://gitorious.org/ gitorious.org] in repository called [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9: medium_platform/bubl].&lt;br /&gt;
&lt;br /&gt;
As of this writing, the latest commit has the hash [https://gitorious.org/medium_platform/bubl/commit/90833fe26b0c5a833054e939909fc887c94561d9 90833fe] . Apparently this is exactly the version used in the F454, since this commit hash can be found in 2 places on the F454 - at runtime (!):&lt;br /&gt;
&lt;br /&gt;
* in the ARM TCM RAM0 and RAM1 (offset 0x5dd4): ''&amp;lt;BUBL 2011.0-rc1-g90833fe&amp;gt;''&lt;br /&gt;
* in the U-Boot environment on eMMC at absolute offset 0x5f000: ''baselineloader_version=BUBL 2011.0-rc1-g90833fe''&lt;br /&gt;
&lt;br /&gt;
This also gives an idea what the leading ''B'' could stands for - apparently ''baseline'' - whatever that means in this case ...&lt;br /&gt;
&lt;br /&gt;
BUBL completes the following [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L109 steps]:&lt;br /&gt;
&lt;br /&gt;
* setup PLL(s)&lt;br /&gt;
* setup timer(s)&lt;br /&gt;
* setup ADC&lt;br /&gt;
* setup DDR memory controller&lt;br /&gt;
* output (using UART0) various [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L44 pieces of information], determined via previously setup ADC (partially info the device bt_nexmed_hwmon.0 under Linux provides, too)&lt;br /&gt;
** board type (''BASI'')&lt;br /&gt;
** hardware version (''???'')&lt;br /&gt;
** boot device (''eMMC'')&lt;br /&gt;
** CPU frequency (''270'')&lt;br /&gt;
** RAM size (''??? MB'')&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
After these initial steps, BUBL [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L202 continues] with loading a binary blob from either NAND or eMMC into RAM. BUBL expects this binary blob to be a U-Boot binary.&lt;br /&gt;
&lt;br /&gt;
* if ADC value 4 says to boot from NAND (NOT the case on F454!)&lt;br /&gt;
** setup NAND interface&lt;br /&gt;
** read U-Boot from NAND (offset?, size?), into RAM at offset 0x81100000&lt;br /&gt;
* else&lt;br /&gt;
** setup MMC/SD interface&lt;br /&gt;
** read U-Boot from eMMC at offset 0x1000, size 256 KiB, into RAM at offset 0x81080000&lt;br /&gt;
&lt;br /&gt;
The binary blob loaded into RAM is checked for validity - if it is really a U-Boot binary (doubleword at offset 0x3c has to be 0xdeadbeef).&lt;br /&gt;
&lt;br /&gt;
If it is not U-Boot or if there is the character ''s'' received on UART0, BUBL discards any loaded binary blob and expects to [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L270 receive a S-record file] from UART0 instead. BUBL writes the received S-record file, translated to binary, into RAM at the offset determined from the S-record file.&lt;br /&gt;
&lt;br /&gt;
The last step is to either jump&lt;br /&gt;
&lt;br /&gt;
* to 0x81100000, in case of U-Boot from NAND  OR&lt;br /&gt;
* to 0x81080000, in case of U-Boot from eMMC  OR&lt;br /&gt;
* to the address determined from the receive S-record file.&lt;br /&gt;
&lt;br /&gt;
=== U-Boot ===&lt;br /&gt;
&lt;br /&gt;
The F454's user boot loader, BUBL, expects to load a U-Boot binary - via MMC/SD interface. It is expected to be 4 KiB into the F454's eMMC (offset 0x1000) and is assumed to be maximally 256 KiB in size.&lt;br /&gt;
&lt;br /&gt;
A look at the U-Boot environment (variable ''ver''), and also at the readable ASCII strings of the U-Boot binary, tells us what version of U-Boot is used:&lt;br /&gt;
&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
&lt;br /&gt;
So it is obviously based on release candidate 2 for U-Boot 2010.12 . The Git commit hash, which follows ''-rc2-'' should tell us about the exact source code version.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as of this writing, your author hasn't been able to find any public source repository, which does comprise a commit with this hash. However there is the very strong assumption that the source code the F454's U-Boot binary was built from is at least based on this [https://gitorious.org/ gitorious.org] repository: [https://gitorious.org/medium_platform/u-boot/source/f319d40632e77470d06d9d758633d106079eccf9: medium_platform/u-boot] .&lt;br /&gt;
&lt;br /&gt;
It turns out that this repository's ''master'' branch (commit [https://gitorious.org/medium_platform/u-boot/commits/f319d40632e77470d06d9d758633d106079eccf9 f319d40]) has been derived from:&lt;br /&gt;
&lt;br /&gt;
* arago-project.org [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=summary U-Boot for DaVinci], tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c DEV.DavinviBSP.03.01.01.38] (commit [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c 6ebeaa9])&lt;br /&gt;
* denx.de [http://www.denx.de/wiki/U-Boot/WebHome U-Boot], some commits after tag [http://git.denx.de/?p=u-boot.git;a=commit;h=d0d2271f8c62e830ec65fb069b6d12dd708e3e2f v2010.12-rc2] (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=f8689b f8689b])&lt;br /&gt;
&lt;br /&gt;
Note that arago-project.org does also have a tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=1af61f3b812b51f6f41ff37cd4a52ce6cfb21d7a DEV.DavinviBSP.03.01.01.39], which is currently equivalent to where the branch ''r39'' points to. And more interesting: this tag is just one single commit further than where tag DEV.DavinviBSP.03.01.01.38 points to.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/version and /boot, while running F454 firmware version 1.00.37, suggest:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/version &lt;br /&gt;
Linux version 2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429 (bticino@medium1) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #1 PREEMPT Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
root@basi:~# ls -l /boot/&lt;br /&gt;
lrwxrwxrwx    1 root     root           66 Nov  8  2012 uImage -&amp;gt; uImage-2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the used [http://kernel.org Linux] kernel is apparently based on [http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tag/?h=linux-2.6.32.y&amp;amp;id=v2.6.32.17 version 2.6.32.17] within Git repository http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git .&lt;br /&gt;
&lt;br /&gt;
Furthermore, when we look at the kernel image file, called ''uImage'', which get's loaded by U-Boot on startup:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ unzip Firmware_F454_vers010037.zip&lt;br /&gt;
Archive:  Firmware_F454_vers010037.zip&lt;br /&gt;
  inflating: F454_010037.fwz&lt;br /&gt;
$ unzip -P F454  F454_010037.fwz&lt;br /&gt;
Archive:  F454_010037.fwz&lt;br /&gt;
  inflating: btweb_only.ext3.gz      &lt;br /&gt;
  inflating: btweb_only_recovery.ext3.gz  &lt;br /&gt;
  inflating: fwz.xml                 &lt;br /&gt;
  inflating: uImage&lt;br /&gt;
$ mkimage -l uImage &lt;br /&gt;
Image Name:   Arago/2.6.32.17-psp03.01.01.39/b&lt;br /&gt;
Created:      Thu Nov  8 17:02:33 2012&lt;br /&gt;
Image Type:   ARM Linux Kernel Image (uncompressed)&lt;br /&gt;
Data Size:    1720032 Bytes = 1679.72 kB = 1.64 MB&lt;br /&gt;
Load Address: 80008000&lt;br /&gt;
Entry Point:  80008000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We recognize 2 important hints within the ''Image Name'' of the uImage: ''Arago'' and the version amendment ''psp03.01.01.39''. Together with the amendment ''-davinci1'' seen within /proc/version, these 2 hints make a very strong suggestion that the used Linux kernel version is based on one managed by TI as part the [http://arago-project.org/ Arago project]: tag [http://arago-project.org/git/projects/?p=linux-davinci.git;a=commit;h=161e942bbb6e3603bccd1548865cfcce0910f1cc DEV.DaVinciPSP.03.01.01.39] within Git repository git://arago-project.org/git/projects/linux-davinci.git .&lt;br /&gt;
&lt;br /&gt;
All these assumption about on what version the used kernel is based on become certain facts after finding one of bticino's public Git repositories on [http://gitorious.org gitorious.org]: http://gitorious.org/medium_platform/linux . It comprises the commit with the hash [http://gitorious.org/medium_platform/linux/commits/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429], which occurs in /proc/version as an amendment to the kernel version.&lt;br /&gt;
&lt;br /&gt;
Newer versions of the firmware apparently use slightly newer kernel versions/commits. However the commit hashes of the newer versions were not yet found in any public repository.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| compile stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| kernel version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| commit hash&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://gitorious.org/medium_platform/linux/commits/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://gitorious.org/medium_platform/linux/commits/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:16:09 CET 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|59f7438a4e85d0a2b1b985a65500a9f05366f6ce&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep 4 18:03:59 CEST 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|f56c4d42a889cb71bd92d101e9e2b0e847ca1603&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
Apparently all kernels include the set of configuration options used to compile them (CONFIG_IKCONFIG=y), because all kernel files have embedded gzip data blobs. To extract such a configuration file from a uImage like the ones found in firmware updates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# extract kernel image, (pure binary, arch/arm/boot/Image)&lt;br /&gt;
$ ZIO=$(binwalk uImage | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }'); \&lt;br /&gt;
	dd if=uImage bs=$ZIO skip=1 | gunzip &amp;gt;Image&lt;br /&gt;
# extract embedded config file&lt;br /&gt;
$ CGZO=$(binwalk Image | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }');&lt;br /&gt;
	dd if=Image bs=$CGZO skip=1 | gunzip &amp;gt;config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It turns out that all three different versions known so far do have exactly the same configuration. The only differences is the typical timestamp which is placed at the beginning of Linux kernel configuration files.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| time stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| md5sum&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:15:22 2014&lt;br /&gt;
|6973e72623f206073f9359035d076ae8&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep  4 18:03:13 2014&lt;br /&gt;
|3e3aaf37a4158eeb1e92417aa51bc16b&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following list shows some of the enabled features - '''''besides the expected ones''''' (support for the Davinci SoC and it's peripherals). Features, which might be surprising to see and/or which are most likely not really used by the current firmware:&lt;br /&gt;
&lt;br /&gt;
* core&lt;br /&gt;
**  Tickless System&lt;br /&gt;
**  Suspend to RAM and standby&lt;br /&gt;
* network&lt;br /&gt;
**  IPv4&lt;br /&gt;
**  in-kernel DHCP support&lt;br /&gt;
**  IPsec: transport, tunnel and BEET mode&lt;br /&gt;
**  IPv6 (module)&lt;br /&gt;
* drivers&lt;br /&gt;
**  loopback device (module)&lt;br /&gt;
**  TUN/TAP device (module)&lt;br /&gt;
**  PPP with async/sync serial support and deflate compression (modules)&lt;br /&gt;
**  network console logging&lt;br /&gt;
* filesystems&lt;br /&gt;
**  Dnotify and Inotify support&lt;br /&gt;
**  Kernel automounter v4 (module)&lt;br /&gt;
**  FAT&lt;br /&gt;
**  NFS v2 and v3&lt;br /&gt;
**  NFS v2 and v3 server (module)&lt;br /&gt;
**  SMB  (module)&lt;br /&gt;
&lt;br /&gt;
On an F454 running firmware version v1.00.37, the following modules are loaded:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# lsmod&lt;br /&gt;
Module                  Size  Used by&lt;br /&gt;
ipv6                  247137  16 &lt;br /&gt;
g_ether                27235  0 &lt;br /&gt;
musb_hdrc              28058  1 g_ether&lt;br /&gt;
dm365mmap               1955  0 &lt;br /&gt;
edmak                  12651  0 &lt;br /&gt;
irqk                    6411  0 &lt;br /&gt;
cmemk                  22327  0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of the above listed features, which are build as modules, just kernel level support for IPv6 is actually loaded. All other loaded modules are peripheral drivers.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=350</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=350"/>
		<updated>2015-02-18T22:13:47Z</updated>

		<summary type="html">&lt;p&gt;Joft: /* Kernel */ Add info about configuration of kernels.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Boot loader ==&lt;br /&gt;
&lt;br /&gt;
=== ARM ROM boot loader - RBL ===&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM processor starts with executing the ARM ''ROM boot loader'' (RBL), which most likely resides in an address space starting at 0x00018000. The RBL searches for a ''user boot loader'' (UBL). In case of the F454 the current assumption is that it does so via DM365's interface SPI0 - on an attached SPI EEPROM.&lt;br /&gt;
&lt;br /&gt;
The RBL specifically searches for a certain ''magic number'' (32 bit), which is 0xa1acedxx. At this point in time it remains a little bit unclear if this number has to be at offset 0x0 of the EEPROM (most likely) or if it can reside within a certain range of bytes/pages/whatever.&lt;br /&gt;
&lt;br /&gt;
The magic number must be followed by 20 bytes of additional information, like UBL executable entry point, size of the UBL, start and load addresses, flags ... TI's [http://www.ti.com/lit/pdf/sprufg5 DM36x User's Guide] has all the details, chapter 11.2.5, page 188.&lt;br /&gt;
&lt;br /&gt;
After having found this piece of information, the RBL acts accordingly: loads the UBL into the ARM's TCM RAM0 and RAM1 (2x 16 KiB, at address space offset 0x0000 and 0x4000 respectively) and jumps to the specified entry point.&lt;br /&gt;
&lt;br /&gt;
=== User boot loader - UBL ===&lt;br /&gt;
&lt;br /&gt;
The ''user boot loader'' (UBL) used by the F454 is called ''BUBL'' and its source code can be found on [https://gitorious.org/ gitorious.org] in repository called [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9: medium_platform/bubl].&lt;br /&gt;
&lt;br /&gt;
As of this writing, the latest commit has the hash [https://gitorious.org/medium_platform/bubl/commit/90833fe26b0c5a833054e939909fc887c94561d9 90833fe] . Apparently this is exactly the version used in the F454, since this commit hash can be found in 2 places on the F454 - at runtime (!):&lt;br /&gt;
&lt;br /&gt;
* in the ARM TCM RAM0 and RAM1 (offset 0x5dd4): ''&amp;lt;BUBL 2011.0-rc1-g90833fe&amp;gt;''&lt;br /&gt;
* in the U-Boot environment on eMMC at absolute offset 0x5f000: ''baselineloader_version=BUBL 2011.0-rc1-g90833fe''&lt;br /&gt;
&lt;br /&gt;
This also gives an idea what the leading ''B'' could stands for - apparently ''baseline'' - whatever that means in this case ...&lt;br /&gt;
&lt;br /&gt;
BUBL completes the following [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L109 steps]:&lt;br /&gt;
&lt;br /&gt;
* setup PLL(s)&lt;br /&gt;
* setup timer(s)&lt;br /&gt;
* setup ADC&lt;br /&gt;
* setup DDR memory controller&lt;br /&gt;
* output (using UART0) various [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L44 pieces of information], determined via previously setup ADC (partially info the device bt_nexmed_hwmon.0 under Linux provides, too)&lt;br /&gt;
** board type (''BASI'')&lt;br /&gt;
** hardware version (''???'')&lt;br /&gt;
** boot device (''eMMC'')&lt;br /&gt;
** CPU frequency (''270'')&lt;br /&gt;
** RAM size (''??? MB'')&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
After these initial steps, BUBL [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L202 continues] with loading a binary blob from either NAND or eMMC into RAM. BUBL expects this binary blob to be a U-Boot binary.&lt;br /&gt;
&lt;br /&gt;
* if ADC value 4 says to boot from NAND (NOT the case on F454!)&lt;br /&gt;
** setup NAND interface&lt;br /&gt;
** read U-Boot from NAND (offset?, size?), into RAM at offset 0x81100000&lt;br /&gt;
* else&lt;br /&gt;
** setup MMC/SD interface&lt;br /&gt;
** read U-Boot from eMMC at offset 0x1000, size 256 KiB, into RAM at offset 0x81080000&lt;br /&gt;
&lt;br /&gt;
The binary blob loaded into RAM is checked for validity - if it is really a U-Boot binary (doubleword at offset 0x3c has to be 0xdeadbeef).&lt;br /&gt;
&lt;br /&gt;
If it is not U-Boot or if there is the character ''s'' received on UART0, BUBL discards any loaded binary blob and expects to [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L270 receive a S-record file] from UART0 instead. BUBL writes the received S-record file, translated to binary, into RAM at the offset determined from the S-record file.&lt;br /&gt;
&lt;br /&gt;
The last step is to either jump&lt;br /&gt;
&lt;br /&gt;
* to 0x81100000, in case of U-Boot from NAND  OR&lt;br /&gt;
* to 0x81080000, in case of U-Boot from eMMC  OR&lt;br /&gt;
* to the address determined from the receive S-record file.&lt;br /&gt;
&lt;br /&gt;
=== U-Boot ===&lt;br /&gt;
&lt;br /&gt;
The F454's user boot loader, BUBL, expects to load a U-Boot binary - via MMC/SD interface. It is expected to be 4 KiB into the F454's eMMC (offset 0x1000) and is assumed to be maximally 256 KiB in size.&lt;br /&gt;
&lt;br /&gt;
A look at the U-Boot environment (variable ''ver''), and also at the readable ASCII strings of the U-Boot binary, tells us what version of U-Boot is used:&lt;br /&gt;
&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
&lt;br /&gt;
So it is obviously based on release candidate 2 for U-Boot 2010.12 . The Git commit hash, which follows ''-rc2-'' should tell us about the exact source code version.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as of this writing, your author hasn't been able to find any public source repository, which does comprise a commit with this hash. However there is the very strong assumption that the source code the F454's U-Boot binary was built from is at least based on this [https://gitorious.org/ gitorious.org] repository: [https://gitorious.org/medium_platform/u-boot/source/f319d40632e77470d06d9d758633d106079eccf9: medium_platform/u-boot] .&lt;br /&gt;
&lt;br /&gt;
It turns out that this repository's ''master'' branch (commit [https://gitorious.org/medium_platform/u-boot/commits/f319d40632e77470d06d9d758633d106079eccf9 f319d40]) has been derived from:&lt;br /&gt;
&lt;br /&gt;
* arago-project.org [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=summary U-Boot for DaVinci], tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c DEV.DavinviBSP.03.01.01.38] (commit [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c 6ebeaa9])&lt;br /&gt;
* denx.de [http://www.denx.de/wiki/U-Boot/WebHome U-Boot], some commits after tag [http://git.denx.de/?p=u-boot.git;a=commit;h=d0d2271f8c62e830ec65fb069b6d12dd708e3e2f v2010.12-rc2] (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=f8689b f8689b])&lt;br /&gt;
&lt;br /&gt;
Note that arago-project.org does also have a tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=1af61f3b812b51f6f41ff37cd4a52ce6cfb21d7a DEV.DavinviBSP.03.01.01.39], which is currently equivalent to where the branch ''r39'' points to. And more interesting: this tag is just one single commit further than where tag DEV.DavinviBSP.03.01.01.38 points to.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
==== Origin ====&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/version and /boot, while running F454 firmware version 1.00.37, suggest:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/version &lt;br /&gt;
Linux version 2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429 (bticino@medium1) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #1 PREEMPT Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
root@basi:~# ls -l /boot/&lt;br /&gt;
lrwxrwxrwx    1 root     root           66 Nov  8  2012 uImage -&amp;gt; uImage-2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the used [http://kernel.org Linux] kernel is apparently based on [http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tag/?h=linux-2.6.32.y&amp;amp;id=v2.6.32.17 version 2.6.32.17] within Git repository http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git .&lt;br /&gt;
&lt;br /&gt;
Furthermore, when we look at the kernel image file, called ''uImage'', which get's loaded by U-Boot on startup:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ unzip Firmware_F454_vers010037.zip&lt;br /&gt;
Archive:  Firmware_F454_vers010037.zip&lt;br /&gt;
  inflating: F454_010037.fwz&lt;br /&gt;
$ unzip -P F454  F454_010037.fwz&lt;br /&gt;
Archive:  F454_010037.fwz&lt;br /&gt;
  inflating: btweb_only.ext3.gz      &lt;br /&gt;
  inflating: btweb_only_recovery.ext3.gz  &lt;br /&gt;
  inflating: fwz.xml                 &lt;br /&gt;
  inflating: uImage&lt;br /&gt;
$ mkimage -l uImage &lt;br /&gt;
Image Name:   Arago/2.6.32.17-psp03.01.01.39/b&lt;br /&gt;
Created:      Thu Nov  8 17:02:33 2012&lt;br /&gt;
Image Type:   ARM Linux Kernel Image (uncompressed)&lt;br /&gt;
Data Size:    1720032 Bytes = 1679.72 kB = 1.64 MB&lt;br /&gt;
Load Address: 80008000&lt;br /&gt;
Entry Point:  80008000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We recognize 2 important hints within the ''Image Name'' of the uImage: ''Arago'' and the version amendment ''psp03.01.01.39''. Together with the amendment ''-davinci1'' seen within /proc/version, these 2 hints make a very strong suggestion that the used Linux kernel version is based on one managed by TI as part the [http://arago-project.org/ Arago project]: tag [http://arago-project.org/git/projects/?p=linux-davinci.git;a=commit;h=161e942bbb6e3603bccd1548865cfcce0910f1cc DEV.DaVinciPSP.03.01.01.39] within Git repository git://arago-project.org/git/projects/linux-davinci.git .&lt;br /&gt;
&lt;br /&gt;
All these assumption about on what version the used kernel is based on become certain facts after finding one of bticino's public Git repositories on [http://gitorious.org gitorious.org]: http://gitorious.org/medium_platform/linux . It comprises the commit with the hash [http://gitorious.org/medium_platform/linux/commits/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429], which occurs in /proc/version as an amendment to the kernel version.&lt;br /&gt;
&lt;br /&gt;
Newer versions of the firmware apparently use slightly newer kernel versions/commits. However the commit hashes of the newer versions were not yet found in any public repository.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| compile stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| kernel version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| commit hash&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://gitorious.org/medium_platform/linux/commits/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://gitorious.org/medium_platform/linux/commits/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:16:09 CET 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|59f7438a4e85d0a2b1b985a65500a9f05366f6ce&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep 4 18:03:59 CEST 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|f56c4d42a889cb71bd92d101e9e2b0e847ca1603&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Configuration ====&lt;br /&gt;
&lt;br /&gt;
Apparently all kernels include the set of configuration options used to compile them (CONFIG_IKCONFIG=y), because all kernel files have embedded gzip data blobs. To extract such a configuration file from a uImage like the ones found in firmware updates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# extract kernel image, (pure binary, arch/arm/boot/Image)&lt;br /&gt;
ZIO=$(binwalk uImage | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }'); \&lt;br /&gt;
	dd if=uImage bs=$ZIO skip=1 | gunzip &amp;gt;Image&lt;br /&gt;
# extract embedded config file&lt;br /&gt;
CGZO=$(binwalk Image | \&lt;br /&gt;
	grep -v -e '^$' -e '^DECIMAL' -e '^-\+' | \&lt;br /&gt;
	grep -e 'gzip compressed data' | \&lt;br /&gt;
	awk '{ print $1 }');&lt;br /&gt;
	dd if=Image bs=$CGZO skip=1 | gunzip &amp;gt;config&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It turns out that all three different versions known so far do have exactly the same configuration. The only differences is the typical timestamp which is placed at the beginning of Linux kernel configuration files.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| time stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| md5sum&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov  8 17:01:23 2012&lt;br /&gt;
|76526190d9603899b4cf6d947d9ed39c&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:15:22 2014&lt;br /&gt;
|6973e72623f206073f9359035d076ae8&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep  4 18:03:13 2014&lt;br /&gt;
|3e3aaf37a4158eeb1e92417aa51bc16b&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following list shows some of the enabled features - '''''besides the expected ones''''' (support for the Davinci SoC and it's peripherals). Features, which might be surprising to see and/or which are most likely not really used by the current firmware:&lt;br /&gt;
&lt;br /&gt;
* core&lt;br /&gt;
**  Tickless System&lt;br /&gt;
**  Suspend to RAM and standby&lt;br /&gt;
* network&lt;br /&gt;
**  IPv4&lt;br /&gt;
**  in-kernel DHCP support&lt;br /&gt;
**  IPsec: transport, tunnel and BEET mode&lt;br /&gt;
**  IPv6 (module)&lt;br /&gt;
* drivers&lt;br /&gt;
**  loopback device (module)&lt;br /&gt;
**  TUN/TAP device (module)&lt;br /&gt;
**  PPP with async/sync serial support and deflate compression (modules)&lt;br /&gt;
**  network console logging&lt;br /&gt;
* filesystems&lt;br /&gt;
**  Dnotify and Inotify support&lt;br /&gt;
**  Kernel automounter v4 (module)&lt;br /&gt;
**  FAT&lt;br /&gt;
**  NFS v2 and v3&lt;br /&gt;
**  NFS v2 and v3 server (module)&lt;br /&gt;
**  SMB  (module)&lt;br /&gt;
&lt;br /&gt;
On an F454 running firmware version v1.00.37, the following modules are loaded:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# lsmod&lt;br /&gt;
Module                  Size  Used by&lt;br /&gt;
ipv6                  247137  16 &lt;br /&gt;
g_ether                27235  0 &lt;br /&gt;
musb_hdrc              28058  1 g_ether&lt;br /&gt;
dm365mmap               1955  0 &lt;br /&gt;
edmak                  12651  0 &lt;br /&gt;
irqk                    6411  0 &lt;br /&gt;
cmemk                  22327  0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of the above listed features, which are build as modules, just kernel level support for IPv6 is actually loaded. All other loaded modules are peripheral drivers.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=349</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=349"/>
		<updated>2015-02-18T09:10:03Z</updated>

		<summary type="html">&lt;p&gt;Joft: /* Kernel */ Add compile time stamp; table of kernels&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Boot loader ==&lt;br /&gt;
&lt;br /&gt;
=== ARM ROM boot loader - RBL ===&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM processor starts with executing the ARM ''ROM boot loader'' (RBL), which most likely resides in an address space starting at 0x00018000. The RBL searches for a ''user boot loader'' (UBL). In case of the F454 the current assumption is that it does so via DM365's interface SPI0 - on an attached SPI EEPROM.&lt;br /&gt;
&lt;br /&gt;
The RBL specifically searches for a certain ''magic number'' (32 bit), which is 0xa1acedxx. At this point in time it remains a little bit unclear if this number has to be at offset 0x0 of the EEPROM (most likely) or if it can reside within a certain range of bytes/pages/whatever.&lt;br /&gt;
&lt;br /&gt;
The magic number must be followed by 20 bytes of additional information, like UBL executable entry point, size of the UBL, start and load addresses, flags ... TI's [http://www.ti.com/lit/pdf/sprufg5 DM36x User's Guide] has all the details, chapter 11.2.5, page 188.&lt;br /&gt;
&lt;br /&gt;
After having found this piece of information, the RBL acts accordingly: loads the UBL into the ARM's TCM RAM0 and RAM1 (2x 16 KiB, at address space offset 0x0000 and 0x4000 respectively) and jumps to the specified entry point.&lt;br /&gt;
&lt;br /&gt;
=== User boot loader - UBL ===&lt;br /&gt;
&lt;br /&gt;
The ''user boot loader'' (UBL) used by the F454 is called ''BUBL'' and its source code can be found on [https://gitorious.org/ gitorious.org] in repository called [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9: medium_platform/bubl].&lt;br /&gt;
&lt;br /&gt;
As of this writing, the latest commit has the hash [https://gitorious.org/medium_platform/bubl/commit/90833fe26b0c5a833054e939909fc887c94561d9 90833fe] . Apparently this is exactly the version used in the F454, since this commit hash can be found in 2 places on the F454 - at runtime (!):&lt;br /&gt;
&lt;br /&gt;
* in the ARM TCM RAM0 and RAM1 (offset 0x5dd4): ''&amp;lt;BUBL 2011.0-rc1-g90833fe&amp;gt;''&lt;br /&gt;
* in the U-Boot environment on eMMC at absolute offset 0x5f000: ''baselineloader_version=BUBL 2011.0-rc1-g90833fe''&lt;br /&gt;
&lt;br /&gt;
This also gives an idea what the leading ''B'' could stands for - apparently ''baseline'' - whatever that means in this case ...&lt;br /&gt;
&lt;br /&gt;
BUBL completes the following [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L109 steps]:&lt;br /&gt;
&lt;br /&gt;
* setup PLL(s)&lt;br /&gt;
* setup timer(s)&lt;br /&gt;
* setup ADC&lt;br /&gt;
* setup DDR memory controller&lt;br /&gt;
* output (using UART0) various [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L44 pieces of information], determined via previously setup ADC (partially info the device bt_nexmed_hwmon.0 under Linux provides, too)&lt;br /&gt;
** board type (''BASI'')&lt;br /&gt;
** hardware version (''???'')&lt;br /&gt;
** boot device (''eMMC'')&lt;br /&gt;
** CPU frequency (''270'')&lt;br /&gt;
** RAM size (''??? MB'')&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
After these initial steps, BUBL [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L202 continues] with loading a binary blob from either NAND or eMMC into RAM. BUBL expects this binary blob to be a U-Boot binary.&lt;br /&gt;
&lt;br /&gt;
* if ADC value 4 says to boot from NAND (NOT the case on F454!)&lt;br /&gt;
** setup NAND interface&lt;br /&gt;
** read U-Boot from NAND (offset?, size?), into RAM at offset 0x81100000&lt;br /&gt;
* else&lt;br /&gt;
** setup MMC/SD interface&lt;br /&gt;
** read U-Boot from eMMC at offset 0x1000, size 256 KiB, into RAM at offset 0x81080000&lt;br /&gt;
&lt;br /&gt;
The binary blob loaded into RAM is checked for validity - if it is really a U-Boot binary (doubleword at offset 0x3c has to be 0xdeadbeef).&lt;br /&gt;
&lt;br /&gt;
If it is not U-Boot or if there is the character ''s'' received on UART0, BUBL discards any loaded binary blob and expects to [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L270 receive a S-record file] from UART0 instead. BUBL writes the received S-record file, translated to binary, into RAM at the offset determined from the S-record file.&lt;br /&gt;
&lt;br /&gt;
The last step is to either jump&lt;br /&gt;
&lt;br /&gt;
* to 0x81100000, in case of U-Boot from NAND  OR&lt;br /&gt;
* to 0x81080000, in case of U-Boot from eMMC  OR&lt;br /&gt;
* to the address determined from the receive S-record file.&lt;br /&gt;
&lt;br /&gt;
=== U-Boot ===&lt;br /&gt;
&lt;br /&gt;
The F454's user boot loader, BUBL, expects to load a U-Boot binary - via MMC/SD interface. It is expected to be 4 KiB into the F454's eMMC (offset 0x1000) and is assumed to be maximally 256 KiB in size.&lt;br /&gt;
&lt;br /&gt;
A look at the U-Boot environment (variable ''ver''), and also at the readable ASCII strings of the U-Boot binary, tells us what version of U-Boot is used:&lt;br /&gt;
&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
&lt;br /&gt;
So it is obviously based on release candidate 2 for U-Boot 2010.12 . The Git commit hash, which follows ''-rc2-'' should tell us about the exact source code version.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as of this writing, your author hasn't been able to find any public source repository, which does comprise a commit with this hash. However there is the very strong assumption that the source code the F454's U-Boot binary was built from is at least based on this [https://gitorious.org/ gitorious.org] repository: [https://gitorious.org/medium_platform/u-boot/source/f319d40632e77470d06d9d758633d106079eccf9: medium_platform/u-boot] .&lt;br /&gt;
&lt;br /&gt;
It turns out that this repository's ''master'' branch (commit [https://gitorious.org/medium_platform/u-boot/commits/f319d40632e77470d06d9d758633d106079eccf9 f319d40]) has been derived from:&lt;br /&gt;
&lt;br /&gt;
* arago-project.org [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=summary U-Boot for DaVinci], tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c DEV.DavinviBSP.03.01.01.38] (commit [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c 6ebeaa9])&lt;br /&gt;
* denx.de [http://www.denx.de/wiki/U-Boot/WebHome U-Boot], some commits after tag [http://git.denx.de/?p=u-boot.git;a=commit;h=d0d2271f8c62e830ec65fb069b6d12dd708e3e2f v2010.12-rc2] (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=f8689b f8689b])&lt;br /&gt;
&lt;br /&gt;
Note that arago-project.org does also have a tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=1af61f3b812b51f6f41ff37cd4a52ce6cfb21d7a DEV.DavinviBSP.03.01.01.39], which is currently equivalent to where the branch ''r39'' points to. And more interesting: this tag is just one single commit further than where tag DEV.DavinviBSP.03.01.01.38 points to.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/version and /boot, while running F454 firmware version 1.00.37, suggest:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/version &lt;br /&gt;
Linux version 2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429 (bticino@medium1) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #1 PREEMPT Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
root@basi:~# ls -l /boot/&lt;br /&gt;
lrwxrwxrwx    1 root     root           66 Nov  8  2012 uImage -&amp;gt; uImage-2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the used [http://kernel.org Linux] kernel is apparently based on [http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tag/?h=linux-2.6.32.y&amp;amp;id=v2.6.32.17 version 2.6.32.17] within Git repository http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git .&lt;br /&gt;
&lt;br /&gt;
Furthermore, when we look at the kernel image file, called ''uImage'', which get's loaded by U-Boot on startup:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ unzip Firmware_F454_vers010037.zip&lt;br /&gt;
Archive:  Firmware_F454_vers010037.zip&lt;br /&gt;
  inflating: F454_010037.fwz&lt;br /&gt;
$ unzip -P F454  F454_010037.fwz&lt;br /&gt;
Archive:  F454_010037.fwz&lt;br /&gt;
  inflating: btweb_only.ext3.gz      &lt;br /&gt;
  inflating: btweb_only_recovery.ext3.gz  &lt;br /&gt;
  inflating: fwz.xml                 &lt;br /&gt;
  inflating: uImage&lt;br /&gt;
$ mkimage -l uImage &lt;br /&gt;
Image Name:   Arago/2.6.32.17-psp03.01.01.39/b&lt;br /&gt;
Created:      Thu Nov  8 17:02:33 2012&lt;br /&gt;
Image Type:   ARM Linux Kernel Image (uncompressed)&lt;br /&gt;
Data Size:    1720032 Bytes = 1679.72 kB = 1.64 MB&lt;br /&gt;
Load Address: 80008000&lt;br /&gt;
Entry Point:  80008000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We recognize 2 important hints within the ''Image Name'' of the uImage: ''Arago'' and the version amendment ''psp03.01.01.39''. Together with the amendment ''-davinci1'' seen within /proc/version, these 2 hints make a very strong suggestion that the used Linux kernel version is based on one managed by TI as part the [http://arago-project.org/ Arago project]: tag [http://arago-project.org/git/projects/?p=linux-davinci.git;a=commit;h=161e942bbb6e3603bccd1548865cfcce0910f1cc DEV.DaVinciPSP.03.01.01.39] within Git repository git://arago-project.org/git/projects/linux-davinci.git .&lt;br /&gt;
&lt;br /&gt;
All these assumption about on what version the used kernel is based on become certain facts after finding one of bticino's public Git repositories on [http://gitorious.org gitorious.org]: http://gitorious.org/medium_platform/linux . It comprises the commit with the hash [http://gitorious.org/medium_platform/linux/commits/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429], which occurs in /proc/version as an amendment to the kernel version.&lt;br /&gt;
&lt;br /&gt;
Newer versions of the firmware apparently use slightly newer kernel versions/commits. However the commit hashes of the newer versions were not yet found in any public repository.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| compile stamp&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| kernel version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| commit hash&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://gitorious.org/medium_platform/linux/commits/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://gitorious.org/medium_platform/linux/commits/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|Fri Jan 17 17:16:09 CET 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|59f7438a4e85d0a2b1b985a65500a9f05366f6ce&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|Thu Sep 4 18:03:59 CEST 2014&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|f56c4d42a889cb71bd92d101e9e2b0e847ca1603&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=348</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=348"/>
		<updated>2015-02-17T22:14:42Z</updated>

		<summary type="html">&lt;p&gt;Joft: /* Kernel */ Add table of kernel version seen in different firmware versions.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Boot loader ==&lt;br /&gt;
&lt;br /&gt;
=== ARM ROM boot loader - RBL ===&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM processor starts with executing the ARM ''ROM boot loader'' (RBL), which most likely resides in an address space starting at 0x00018000. The RBL searches for a ''user boot loader'' (UBL). In case of the F454 the current assumption is that it does so via DM365's interface SPI0 - on an attached SPI EEPROM.&lt;br /&gt;
&lt;br /&gt;
The RBL specifically searches for a certain ''magic number'' (32 bit), which is 0xa1acedxx. At this point in time it remains a little bit unclear if this number has to be at offset 0x0 of the EEPROM (most likely) or if it can reside within a certain range of bytes/pages/whatever.&lt;br /&gt;
&lt;br /&gt;
The magic number must be followed by 20 bytes of additional information, like UBL executable entry point, size of the UBL, start and load addresses, flags ... TI's [http://www.ti.com/lit/pdf/sprufg5 DM36x User's Guide] has all the details, chapter 11.2.5, page 188.&lt;br /&gt;
&lt;br /&gt;
After having found this piece of information, the RBL acts accordingly: loads the UBL into the ARM's TCM RAM0 and RAM1 (2x 16 KiB, at address space offset 0x0000 and 0x4000 respectively) and jumps to the specified entry point.&lt;br /&gt;
&lt;br /&gt;
=== User boot loader - UBL ===&lt;br /&gt;
&lt;br /&gt;
The ''user boot loader'' (UBL) used by the F454 is called ''BUBL'' and its source code can be found on [https://gitorious.org/ gitorious.org] in repository called [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9: medium_platform/bubl].&lt;br /&gt;
&lt;br /&gt;
As of this writing, the latest commit has the hash [https://gitorious.org/medium_platform/bubl/commit/90833fe26b0c5a833054e939909fc887c94561d9 90833fe] . Apparently this is exactly the version used in the F454, since this commit hash can be found in 2 places on the F454 - at runtime (!):&lt;br /&gt;
&lt;br /&gt;
* in the ARM TCM RAM0 and RAM1 (offset 0x5dd4): ''&amp;lt;BUBL 2011.0-rc1-g90833fe&amp;gt;''&lt;br /&gt;
* in the U-Boot environment on eMMC at absolute offset 0x5f000: ''baselineloader_version=BUBL 2011.0-rc1-g90833fe''&lt;br /&gt;
&lt;br /&gt;
This also gives an idea what the leading ''B'' could stands for - apparently ''baseline'' - whatever that means in this case ...&lt;br /&gt;
&lt;br /&gt;
BUBL completes the following [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L109 steps]:&lt;br /&gt;
&lt;br /&gt;
* setup PLL(s)&lt;br /&gt;
* setup timer(s)&lt;br /&gt;
* setup ADC&lt;br /&gt;
* setup DDR memory controller&lt;br /&gt;
* output (using UART0) various [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L44 pieces of information], determined via previously setup ADC (partially info the device bt_nexmed_hwmon.0 under Linux provides, too)&lt;br /&gt;
** board type (''BASI'')&lt;br /&gt;
** hardware version (''???'')&lt;br /&gt;
** boot device (''eMMC'')&lt;br /&gt;
** CPU frequency (''270'')&lt;br /&gt;
** RAM size (''??? MB'')&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
After these initial steps, BUBL [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L202 continues] with loading a binary blob from either NAND or eMMC into RAM. BUBL expects this binary blob to be a U-Boot binary.&lt;br /&gt;
&lt;br /&gt;
* if ADC value 4 says to boot from NAND (NOT the case on F454!)&lt;br /&gt;
** setup NAND interface&lt;br /&gt;
** read U-Boot from NAND (offset?, size?), into RAM at offset 0x81100000&lt;br /&gt;
* else&lt;br /&gt;
** setup MMC/SD interface&lt;br /&gt;
** read U-Boot from eMMC at offset 0x1000, size 256 KiB, into RAM at offset 0x81080000&lt;br /&gt;
&lt;br /&gt;
The binary blob loaded into RAM is checked for validity - if it is really a U-Boot binary (doubleword at offset 0x3c has to be 0xdeadbeef).&lt;br /&gt;
&lt;br /&gt;
If it is not U-Boot or if there is the character ''s'' received on UART0, BUBL discards any loaded binary blob and expects to [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L270 receive a S-record file] from UART0 instead. BUBL writes the received S-record file, translated to binary, into RAM at the offset determined from the S-record file.&lt;br /&gt;
&lt;br /&gt;
The last step is to either jump&lt;br /&gt;
&lt;br /&gt;
* to 0x81100000, in case of U-Boot from NAND  OR&lt;br /&gt;
* to 0x81080000, in case of U-Boot from eMMC  OR&lt;br /&gt;
* to the address determined from the receive S-record file.&lt;br /&gt;
&lt;br /&gt;
=== U-Boot ===&lt;br /&gt;
&lt;br /&gt;
The F454's user boot loader, BUBL, expects to load a U-Boot binary - via MMC/SD interface. It is expected to be 4 KiB into the F454's eMMC (offset 0x1000) and is assumed to be maximally 256 KiB in size.&lt;br /&gt;
&lt;br /&gt;
A look at the U-Boot environment (variable ''ver''), and also at the readable ASCII strings of the U-Boot binary, tells us what version of U-Boot is used:&lt;br /&gt;
&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
&lt;br /&gt;
So it is obviously based on release candidate 2 for U-Boot 2010.12 . The Git commit hash, which follows ''-rc2-'' should tell us about the exact source code version.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as of this writing, your author hasn't been able to find any public source repository, which does comprise a commit with this hash. However there is the very strong assumption that the source code the F454's U-Boot binary was built from is at least based on this [https://gitorious.org/ gitorious.org] repository: [https://gitorious.org/medium_platform/u-boot/source/f319d40632e77470d06d9d758633d106079eccf9: medium_platform/u-boot] .&lt;br /&gt;
&lt;br /&gt;
It turns out that this repository's ''master'' branch (commit [https://gitorious.org/medium_platform/u-boot/commits/f319d40632e77470d06d9d758633d106079eccf9 f319d40]) has been derived from:&lt;br /&gt;
&lt;br /&gt;
* arago-project.org [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=summary U-Boot for DaVinci], tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c DEV.DavinviBSP.03.01.01.38] (commit [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c 6ebeaa9])&lt;br /&gt;
* denx.de [http://www.denx.de/wiki/U-Boot/WebHome U-Boot], some commits after tag [http://git.denx.de/?p=u-boot.git;a=commit;h=d0d2271f8c62e830ec65fb069b6d12dd708e3e2f v2010.12-rc2] (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=f8689b f8689b])&lt;br /&gt;
&lt;br /&gt;
Note that arago-project.org does also have a tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=1af61f3b812b51f6f41ff37cd4a52ce6cfb21d7a DEV.DavinviBSP.03.01.01.39], which is currently equivalent to where the branch ''r39'' points to. And more interesting: this tag is just one single commit further than where tag DEV.DavinviBSP.03.01.01.38 points to.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/version and /boot, while running F454 firmware version 1.00.37, suggest:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/version &lt;br /&gt;
Linux version 2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429 (bticino@medium1) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #1 PREEMPT Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
root@basi:~# ls -l /boot/&lt;br /&gt;
lrwxrwxrwx    1 root     root           66 Nov  8  2012 uImage -&amp;gt; uImage-2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the used [http://kernel.org Linux] kernel is apparently based on [http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tag/?h=linux-2.6.32.y&amp;amp;id=v2.6.32.17 version 2.6.32.17] within Git repository http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git .&lt;br /&gt;
&lt;br /&gt;
Furthermore, when we look at the kernel image file, called ''uImage'', which get's loaded by U-Boot on startup:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ unzip Firmware_F454_vers010037.zip&lt;br /&gt;
Archive:  Firmware_F454_vers010037.zip&lt;br /&gt;
  inflating: F454_010037.fwz&lt;br /&gt;
$ unzip -P F454  F454_010037.fwz&lt;br /&gt;
Archive:  F454_010037.fwz&lt;br /&gt;
  inflating: btweb_only.ext3.gz      &lt;br /&gt;
  inflating: btweb_only_recovery.ext3.gz  &lt;br /&gt;
  inflating: fwz.xml                 &lt;br /&gt;
  inflating: uImage&lt;br /&gt;
$ mkimage -l uImage &lt;br /&gt;
Image Name:   Arago/2.6.32.17-psp03.01.01.39/b&lt;br /&gt;
Created:      Thu Nov  8 17:02:33 2012&lt;br /&gt;
Image Type:   ARM Linux Kernel Image (uncompressed)&lt;br /&gt;
Data Size:    1720032 Bytes = 1679.72 kB = 1.64 MB&lt;br /&gt;
Load Address: 80008000&lt;br /&gt;
Entry Point:  80008000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We recognize 2 important hints within the ''Image Name'' of the uImage: ''Arago'' and the version amendment ''psp03.01.01.39''. Together with the amendment ''-davinci1'' seen within /proc/version, these 2 hints make a very strong suggestion that the used Linux kernel version is based on one managed by TI as part the [http://arago-project.org/ Arago project]: tag [http://arago-project.org/git/projects/?p=linux-davinci.git;a=commit;h=161e942bbb6e3603bccd1548865cfcce0910f1cc DEV.DaVinciPSP.03.01.01.39] within Git repository git://arago-project.org/git/projects/linux-davinci.git .&lt;br /&gt;
&lt;br /&gt;
All these assumption about on what version the used kernel is based on become certain facts after finding one of bticino's public Git repositories on [http://gitorious.org gitorious.org]: http://gitorious.org/medium_platform/linux . It comprises the commit with the hash [http://gitorious.org/medium_platform/linux/commits/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429], which occurs in /proc/version as an amendment to the kernel version.&lt;br /&gt;
&lt;br /&gt;
Newer versions of the firmware apparently use slightly newer kernel versions/commits. However the commit hashes of the newer versions were not yet found in any public repository.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| firmware version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| kernel version&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| commit hash&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.34&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://gitorious.org/medium_platform/linux/commits/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.37&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|[http://gitorious.org/medium_platform/linux/commits/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429]&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.45&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|59f7438a4e85d0a2b1b985a65500a9f05366f6ce&lt;br /&gt;
|-&lt;br /&gt;
|v1.00.51&lt;br /&gt;
|v2.6.32.17-davinci1&lt;br /&gt;
|f56c4d42a889cb71bd92d101e9e2b0e847ca1603&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=347</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=347"/>
		<updated>2015-02-17T09:09:09Z</updated>

		<summary type="html">&lt;p&gt;Joft: /* Operating System */ Document origins of used Linux kernel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Boot loader ==&lt;br /&gt;
&lt;br /&gt;
=== ARM ROM boot loader - RBL ===&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM processor starts with executing the ARM ''ROM boot loader'' (RBL), which most likely resides in an address space starting at 0x00018000. The RBL searches for a ''user boot loader'' (UBL). In case of the F454 the current assumption is that it does so via DM365's interface SPI0 - on an attached SPI EEPROM.&lt;br /&gt;
&lt;br /&gt;
The RBL specifically searches for a certain ''magic number'' (32 bit), which is 0xa1acedxx. At this point in time it remains a little bit unclear if this number has to be at offset 0x0 of the EEPROM (most likely) or if it can reside within a certain range of bytes/pages/whatever.&lt;br /&gt;
&lt;br /&gt;
The magic number must be followed by 20 bytes of additional information, like UBL executable entry point, size of the UBL, start and load addresses, flags ... TI's [http://www.ti.com/lit/pdf/sprufg5 DM36x User's Guide] has all the details, chapter 11.2.5, page 188.&lt;br /&gt;
&lt;br /&gt;
After having found this piece of information, the RBL acts accordingly: loads the UBL into the ARM's TCM RAM0 and RAM1 (2x 16 KiB, at address space offset 0x0000 and 0x4000 respectively) and jumps to the specified entry point.&lt;br /&gt;
&lt;br /&gt;
=== User boot loader - UBL ===&lt;br /&gt;
&lt;br /&gt;
The ''user boot loader'' (UBL) used by the F454 is called ''BUBL'' and its source code can be found on [https://gitorious.org/ gitorious.org] in repository called [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9: medium_platform/bubl].&lt;br /&gt;
&lt;br /&gt;
As of this writing, the latest commit has the hash [https://gitorious.org/medium_platform/bubl/commit/90833fe26b0c5a833054e939909fc887c94561d9 90833fe] . Apparently this is exactly the version used in the F454, since this commit hash can be found in 2 places on the F454 - at runtime (!):&lt;br /&gt;
&lt;br /&gt;
* in the ARM TCM RAM0 and RAM1 (offset 0x5dd4): ''&amp;lt;BUBL 2011.0-rc1-g90833fe&amp;gt;''&lt;br /&gt;
* in the U-Boot environment on eMMC at absolute offset 0x5f000: ''baselineloader_version=BUBL 2011.0-rc1-g90833fe''&lt;br /&gt;
&lt;br /&gt;
This also gives an idea what the leading ''B'' could stands for - apparently ''baseline'' - whatever that means in this case ...&lt;br /&gt;
&lt;br /&gt;
BUBL completes the following [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L109 steps]:&lt;br /&gt;
&lt;br /&gt;
* setup PLL(s)&lt;br /&gt;
* setup timer(s)&lt;br /&gt;
* setup ADC&lt;br /&gt;
* setup DDR memory controller&lt;br /&gt;
* output (using UART0) various [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L44 pieces of information], determined via previously setup ADC (partially info the device bt_nexmed_hwmon.0 under Linux provides, too)&lt;br /&gt;
** board type (''BASI'')&lt;br /&gt;
** hardware version (''???'')&lt;br /&gt;
** boot device (''eMMC'')&lt;br /&gt;
** CPU frequency (''270'')&lt;br /&gt;
** RAM size (''??? MB'')&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
After these initial steps, BUBL [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L202 continues] with loading a binary blob from either NAND or eMMC into RAM. BUBL expects this binary blob to be a U-Boot binary.&lt;br /&gt;
&lt;br /&gt;
* if ADC value 4 says to boot from NAND (NOT the case on F454!)&lt;br /&gt;
** setup NAND interface&lt;br /&gt;
** read U-Boot from NAND (offset?, size?), into RAM at offset 0x81100000&lt;br /&gt;
* else&lt;br /&gt;
** setup MMC/SD interface&lt;br /&gt;
** read U-Boot from eMMC at offset 0x1000, size 256 KiB, into RAM at offset 0x81080000&lt;br /&gt;
&lt;br /&gt;
The binary blob loaded into RAM is checked for validity - if it is really a U-Boot binary (doubleword at offset 0x3c has to be 0xdeadbeef).&lt;br /&gt;
&lt;br /&gt;
If it is not U-Boot or if there is the character ''s'' received on UART0, BUBL discards any loaded binary blob and expects to [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L270 receive a S-record file] from UART0 instead. BUBL writes the received S-record file, translated to binary, into RAM at the offset determined from the S-record file.&lt;br /&gt;
&lt;br /&gt;
The last step is to either jump&lt;br /&gt;
&lt;br /&gt;
* to 0x81100000, in case of U-Boot from NAND  OR&lt;br /&gt;
* to 0x81080000, in case of U-Boot from eMMC  OR&lt;br /&gt;
* to the address determined from the receive S-record file.&lt;br /&gt;
&lt;br /&gt;
=== U-Boot ===&lt;br /&gt;
&lt;br /&gt;
The F454's user boot loader, BUBL, expects to load a U-Boot binary - via MMC/SD interface. It is expected to be 4 KiB into the F454's eMMC (offset 0x1000) and is assumed to be maximally 256 KiB in size.&lt;br /&gt;
&lt;br /&gt;
A look at the U-Boot environment (variable ''ver''), and also at the readable ASCII strings of the U-Boot binary, tells us what version of U-Boot is used:&lt;br /&gt;
&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
&lt;br /&gt;
So it is obviously based on release candidate 2 for U-Boot 2010.12 . The Git commit hash, which follows ''-rc2-'' should tell us about the exact source code version.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as of this writing, your author hasn't been able to find any public source repository, which does comprise a commit with this hash. However there is the very strong assumption that the source code the F454's U-Boot binary was built from is at least based on this [https://gitorious.org/ gitorious.org] repository: [https://gitorious.org/medium_platform/u-boot/source/f319d40632e77470d06d9d758633d106079eccf9: medium_platform/u-boot] .&lt;br /&gt;
&lt;br /&gt;
It turns out that this repository's ''master'' branch (commit [https://gitorious.org/medium_platform/u-boot/commits/f319d40632e77470d06d9d758633d106079eccf9 f319d40]) has been derived from:&lt;br /&gt;
&lt;br /&gt;
* arago-project.org [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=summary U-Boot for DaVinci], tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c DEV.DavinviBSP.03.01.01.38] (commit [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c 6ebeaa9])&lt;br /&gt;
* denx.de [http://www.denx.de/wiki/U-Boot/WebHome U-Boot], some commits after tag [http://git.denx.de/?p=u-boot.git;a=commit;h=d0d2271f8c62e830ec65fb069b6d12dd708e3e2f v2010.12-rc2] (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=f8689b f8689b])&lt;br /&gt;
&lt;br /&gt;
Note that arago-project.org does also have a tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=1af61f3b812b51f6f41ff37cd4a52ce6cfb21d7a DEV.DavinviBSP.03.01.01.39], which is currently equivalent to where the branch ''r39'' points to. And more interesting: this tag is just one single commit further than where tag DEV.DavinviBSP.03.01.01.38 points to.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/version and /boot, while running F454 firmware version 1.00.37, suggest:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/version &lt;br /&gt;
Linux version 2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429 (bticino@medium1) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #1 PREEMPT Thu Nov 8 17:02:20 CET 2012&lt;br /&gt;
root@basi:~# ls -l /boot/&lt;br /&gt;
lrwxrwxrwx    1 root     root           66 Nov  8  2012 uImage -&amp;gt; uImage-2.6.32.17-davinci1-8ed3c294c0a661d818ffab0b94c381289740d429&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So, the used [http://kernel.org Linux] kernel is apparently based on [http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tag/?h=linux-2.6.32.y&amp;amp;id=v2.6.32.17 version 2.6.32.17] within Git repository http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git .&lt;br /&gt;
&lt;br /&gt;
Furthermore, when we look at the kernel image file, called ''uImage'', which get's loaded by U-Boot on startup:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ unzip Firmware_F454_vers010037.zip&lt;br /&gt;
Archive:  Firmware_F454_vers010037.zip&lt;br /&gt;
  inflating: F454_010037.fwz&lt;br /&gt;
$ unzip -P F454  F454_010037.fwz&lt;br /&gt;
Archive:  F454_010037.fwz&lt;br /&gt;
  inflating: btweb_only.ext3.gz      &lt;br /&gt;
  inflating: btweb_only_recovery.ext3.gz  &lt;br /&gt;
  inflating: fwz.xml                 &lt;br /&gt;
  inflating: uImage&lt;br /&gt;
$ mkimage -l uImage &lt;br /&gt;
Image Name:   Arago/2.6.32.17-psp03.01.01.39/b&lt;br /&gt;
Created:      Thu Nov  8 17:02:33 2012&lt;br /&gt;
Image Type:   ARM Linux Kernel Image (uncompressed)&lt;br /&gt;
Data Size:    1720032 Bytes = 1679.72 kB = 1.64 MB&lt;br /&gt;
Load Address: 80008000&lt;br /&gt;
Entry Point:  80008000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We recognize 2 important hints within the ''Image Name'' of the uImage: ''Arago'' and the version amendment ''psp03.01.01.39''. Together with the amendment ''-davinci1'' seen within /proc/version, these 2 hints make a very strong suggestion that the used Linux kernel version is based on one managed by TI as part the [http://arago-project.org/ Arago project]: tag [http://arago-project.org/git/projects/?p=linux-davinci.git;a=commit;h=161e942bbb6e3603bccd1548865cfcce0910f1cc DEV.DaVinciPSP.03.01.01.39] within Git repository git://arago-project.org/git/projects/linux-davinci.git .&lt;br /&gt;
&lt;br /&gt;
All these assumption about on what version the used kernel is based on become certain facts after finding one of bticino's public Git repositories on [http://gitorious.org gitorious.org]: http://gitorious.org/medium_platform/linux . It comprises the commit with the hash [https://gitorious.org/medium_platform/linux/commits/8ed3c294c0a661d818ffab0b94c381289740d429 8ed3c294c0a661d818ffab0b94c381289740d429], which occurs in /proc/version as an amendment to the kernel version.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=341</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=341"/>
		<updated>2014-12-11T09:52:58Z</updated>

		<summary type="html">&lt;p&gt;Joft: Start section about U-Boot, where it comes from.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Boot loader ==&lt;br /&gt;
&lt;br /&gt;
=== ARM ROM boot loader - RBL ===&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM processor starts with executing the ARM ''ROM boot loader'' (RBL), which most likely resides in an address space starting at 0x00018000. The RBL searches for a ''user boot loader'' (UBL). In case of the F454 the current assumption is that it does so via DM365's interface SPI0 - on an attached SPI EEPROM.&lt;br /&gt;
&lt;br /&gt;
The RBL specifically searches for a certain ''magic number'' (32 bit), which is 0xa1acedxx. At this point in time it remains a little bit unclear if this number has to be at offset 0x0 of the EEPROM (most likely) or if it can reside within a certain range of bytes/pages/whatever.&lt;br /&gt;
&lt;br /&gt;
The magic number must be followed by 20 bytes of additional information, like UBL executable entry point, size of the UBL, start and load addresses, flags ... TI's [http://www.ti.com/lit/pdf/sprufg5 DM36x User's Guide] has all the details, chapter 11.2.5, page 188.&lt;br /&gt;
&lt;br /&gt;
After having found this piece of information, the RBL acts accordingly: loads the UBL into the ARM's TCM RAM0 and RAM1 (2x 16 KiB, at address space offset 0x0000 and 0x4000 respectively) and jumps to the specified entry point.&lt;br /&gt;
&lt;br /&gt;
=== User boot loader - UBL ===&lt;br /&gt;
&lt;br /&gt;
The ''user boot loader'' (UBL) used by the F454 is called ''BUBL'' and its source code can be found on [https://gitorious.org/ gitorious.org] in repository called [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9: medium_platform/bubl].&lt;br /&gt;
&lt;br /&gt;
As of this writing, the latest commit has the hash [https://gitorious.org/medium_platform/bubl/commit/90833fe26b0c5a833054e939909fc887c94561d9 90833fe] . Apparently this is exactly the version used in the F454, since this commit hash can be found in 2 places on the F454 - at runtime (!):&lt;br /&gt;
&lt;br /&gt;
* in the ARM TCM RAM0 and RAM1 (offset 0x5dd4): ''&amp;lt;BUBL 2011.0-rc1-g90833fe&amp;gt;''&lt;br /&gt;
* in the U-Boot environment on eMMC at absolute offset 0x5f000: ''baselineloader_version=BUBL 2011.0-rc1-g90833fe''&lt;br /&gt;
&lt;br /&gt;
This also gives an idea what the leading ''B'' could stands for - apparently ''baseline'' - whatever that means in this case ...&lt;br /&gt;
&lt;br /&gt;
BUBL completes the following [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L109 steps]:&lt;br /&gt;
&lt;br /&gt;
* setup PLL(s)&lt;br /&gt;
* setup timer(s)&lt;br /&gt;
* setup ADC&lt;br /&gt;
* setup DDR memory controller&lt;br /&gt;
* output (using UART0) various [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L44 pieces of information], determined via previously setup ADC (partially info the device bt_nexmed_hwmon.0 under Linux provides, too)&lt;br /&gt;
** board type (''BASI'')&lt;br /&gt;
** hardware version (''???'')&lt;br /&gt;
** boot device (''eMMC'')&lt;br /&gt;
** CPU frequency (''270'')&lt;br /&gt;
** RAM size (''??? MB'')&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
After these initial steps, BUBL [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L202 continues] with loading a binary blob from either NAND or eMMC into RAM. BUBL expects this binary blob to be a U-Boot binary.&lt;br /&gt;
&lt;br /&gt;
* if ADC value 4 says to boot from NAND (NOT the case on F454!)&lt;br /&gt;
** setup NAND interface&lt;br /&gt;
** read U-Boot from NAND (offset?, size?), into RAM at offset 0x81100000&lt;br /&gt;
* else&lt;br /&gt;
** setup MMC/SD interface&lt;br /&gt;
** read U-Boot from eMMC at offset 0x1000, size 256 KiB, into RAM at offset 0x81080000&lt;br /&gt;
&lt;br /&gt;
The binary blob loaded into RAM is checked for validity - if it is really a U-Boot binary (doubleword at offset 0x3c has to be 0xdeadbeef).&lt;br /&gt;
&lt;br /&gt;
If it is not U-Boot or if there is the character ''s'' received on UART0, BUBL discards any loaded binary blob and expects to [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L270 receive a S-record file] from UART0 instead. BUBL writes the received S-record file, translated to binary, into RAM at the offset determined from the S-record file.&lt;br /&gt;
&lt;br /&gt;
The last step is to either jump&lt;br /&gt;
&lt;br /&gt;
* to 0x81100000, in case of U-Boot from NAND  OR&lt;br /&gt;
* to 0x81080000, in case of U-Boot from eMMC  OR&lt;br /&gt;
* to the address determined from the receive S-record file.&lt;br /&gt;
&lt;br /&gt;
=== U-Boot ===&lt;br /&gt;
&lt;br /&gt;
The F454's user boot loader, BUBL, expects to load a U-Boot binary - via MMC/SD interface. It is expected to be 4 KiB into the F454's eMMC (offset 0x1000) and is assumed to be maximally 256 KiB in size.&lt;br /&gt;
&lt;br /&gt;
A look at the U-Boot environment (variable ''ver''), and also at the readable ASCII strings of the U-Boot binary, tells us what version of U-Boot is used:&lt;br /&gt;
&lt;br /&gt;
U-Boot 2010.12-rc2-3ed2d264ae41bbc05f961a8aececdd636cdb1582 (Jul 23 2012 - 11:40:09)&lt;br /&gt;
&lt;br /&gt;
So it is obviously based on release candidate 2 for U-Boot 2010.12 . The Git commit hash, which follows ''-rc2-'' should tell us about the exact source code version.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, as of this writing, your author hasn't been able to find any public source repository, which does comprise a commit with this hash. However there is the very strong assumption that the source code the F454's U-Boot binary was built from is at least based on this [https://gitorious.org/ gitorious.org] repository: [https://gitorious.org/medium_platform/u-boot/source/f319d40632e77470d06d9d758633d106079eccf9: medium_platform/u-boot] .&lt;br /&gt;
&lt;br /&gt;
It turns out that this repository's ''master'' branch (commit [https://gitorious.org/medium_platform/u-boot/commits/f319d40632e77470d06d9d758633d106079eccf9 f319d40]) has been derived from:&lt;br /&gt;
&lt;br /&gt;
* arago-project.org [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=summary U-Boot for DaVinci], tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c DEV.DavinviBSP.03.01.01.38] (commit [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=6ebeaa9ef432217def1213e9cc611771d6412b1c 6ebeaa9])&lt;br /&gt;
* denx.de [http://www.denx.de/wiki/U-Boot/WebHome U-Boot], some commits after tag [http://git.denx.de/?p=u-boot.git;a=commit;h=d0d2271f8c62e830ec65fb069b6d12dd708e3e2f v2010.12-rc2] (commit [http://git.denx.de/?p=u-boot.git;a=commit;h=f8689b f8689b])&lt;br /&gt;
&lt;br /&gt;
Note that arago-project.org does also have a tag [http://arago-project.org/git/projects/?p=u-boot-davinci.git;a=commit;h=1af61f3b812b51f6f41ff37cd4a52ce6cfb21d7a DEV.DavinviBSP.03.01.01.39], which is currently equivalent to where the branch ''r39'' points to. And more interesting: this tag is just one single commit further than where tag DEV.DavinviBSP.03.01.01.38 points to.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=340</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=340"/>
		<updated>2014-12-09T09:58:50Z</updated>

		<summary type="html">&lt;p&gt;Joft: Add info about the used UBL.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Boot loader ==&lt;br /&gt;
&lt;br /&gt;
=== ARM ROM boot loader - RBL ===&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM processor starts with executing the ARM ''ROM boot loader'' (RBL), which most likely resides in an address space starting at 0x00018000. The RBL searches for a ''user boot loader'' (UBL). In case of the F454 the current assumption is that it does so via DM365's interface SPI0 - on an attached SPI EEPROM.&lt;br /&gt;
&lt;br /&gt;
The RBL specifically searches for a certain ''magic number'' (32 bit), which is 0xa1acedxx. At this point in time it remains a little bit unclear if this number has to be at offset 0x0 of the EEPROM (most likely) or if it can reside within a certain range of bytes/pages/whatever.&lt;br /&gt;
&lt;br /&gt;
The magic number must be followed by 20 bytes of additional information, like UBL executable entry point, size of the UBL, start and load addresses, flags ... TI's [http://www.ti.com/lit/pdf/sprufg5 DM36x User's Guide] has all the details, chapter 11.2.5, page 188.&lt;br /&gt;
&lt;br /&gt;
After having found this piece of information, the RBL acts accordingly: loads the UBL into the ARM's TCM RAM0 and RAM1 (2x 16 KiB, at address space offset 0x0000 and 0x4000 respectively) and jumps to the specified entry point.&lt;br /&gt;
&lt;br /&gt;
=== User boot loader - UBL ===&lt;br /&gt;
&lt;br /&gt;
The ''user boot loader'' (UBL) used by the F454 is called ''BUBL'' and its source code can be found on [https://gitorious.org/ gitorious.org] in repository called [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9: medium_platform/bubl].&lt;br /&gt;
&lt;br /&gt;
As of this writing, the latest commit has the hash [https://gitorious.org/medium_platform/bubl/commit/90833fe26b0c5a833054e939909fc887c94561d9 90833fe] . Apparently this is exactly the version used in the F454, since this commit hash can be found in 2 places on the F454 - at runtime (!):&lt;br /&gt;
&lt;br /&gt;
* in the ARM TCM RAM0 and RAM1 (offset 0x5dd4): ''&amp;lt;BUBL 2011.0-rc1-g90833fe&amp;gt;''&lt;br /&gt;
* in the U-Boot environment on eMMC at absolute offset 0x5f000: ''baselineloader_version=BUBL 2011.0-rc1-g90833fe''&lt;br /&gt;
&lt;br /&gt;
This also gives an idea what the leading ''B'' could stands for - apparently ''baseline'' - whatever that means in this case ...&lt;br /&gt;
&lt;br /&gt;
BUBL completes the following [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L109 steps]:&lt;br /&gt;
&lt;br /&gt;
* setup PLL(s)&lt;br /&gt;
* setup timer(s)&lt;br /&gt;
* setup ADC&lt;br /&gt;
* setup DDR memory controller&lt;br /&gt;
* output (using UART0) various [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L44 pieces of information], determined via previously setup ADC (partially info the device bt_nexmed_hwmon.0 under Linux provides, too)&lt;br /&gt;
** board type (''BASI'')&lt;br /&gt;
** hardware version (''???'')&lt;br /&gt;
** boot device (''eMMC'')&lt;br /&gt;
** CPU frequency (''270'')&lt;br /&gt;
** RAM size (''??? MB'')&lt;br /&gt;
** ...&lt;br /&gt;
&lt;br /&gt;
After these initial steps, BUBL [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L202 continues] with loading a binary blob from either NAND or eMMC into RAM. BUBL expects this binary blob to be a U-Boot binary.&lt;br /&gt;
&lt;br /&gt;
* if ADC value 4 says to boot from NAND (NOT the case on F454!)&lt;br /&gt;
** setup NAND interface&lt;br /&gt;
** read U-Boot from NAND (offset?, size?), into RAM at offset 0x81100000&lt;br /&gt;
* else&lt;br /&gt;
** setup MMC/SD interface&lt;br /&gt;
** read U-Boot from eMMC at offset 0x1000, size 256 KiB, into RAM at offset 0x81080000&lt;br /&gt;
&lt;br /&gt;
The binary blob loaded into RAM is checked for validity - if it is really a U-Boot binary (doubleword at offset 0x3c has to be 0xdeadbeef).&lt;br /&gt;
&lt;br /&gt;
If it is not U-Boot or if there is the character ''s'' received on UART0, BUBL discards any loaded binary blob and expects to [https://gitorious.org/medium_platform/bubl/source/90833fe26b0c5a833054e939909fc887c94561d9:main.c#L270 receive a S-record file] from UART0 instead. BUBL writes the received S-record file, translated to binary, into RAM at the offset determined from the S-record file.&lt;br /&gt;
&lt;br /&gt;
The last step is to either jump&lt;br /&gt;
&lt;br /&gt;
* to 0x81100000, in case of U-Boot from NAND  OR&lt;br /&gt;
* to 0x81080000, in case of U-Boot from eMMC  OR&lt;br /&gt;
* to the address determined from the receive S-record file.&lt;br /&gt;
&lt;br /&gt;
=== U-Boot ===&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=339</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=339"/>
		<updated>2014-12-08T09:55:51Z</updated>

		<summary type="html">&lt;p&gt;Joft: Add boot loader section, add info about th RBL.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Boot loader ==&lt;br /&gt;
&lt;br /&gt;
=== ARM ROM boot loader - RBL ===&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM processor starts with executing the ARM ''ROM boot loader'' (RBL), which most likely resides in an address space starting at 0x00018000. The RBL searches for a ''user boot loader'' (UBL). In case of the F454 the current assumption is that it does so via DM365's interface SPI0 - on an attached SPI EEPROM.&lt;br /&gt;
&lt;br /&gt;
The RBL specifically searches for a certain ''magic number'' (32 bit), which is 0xa1acedxx. At this point in time it remains a little bit unclear if this number has to be at offset 0x0 of the EEPROM (most likely) or if it can reside within a certain range of bytes/pages/whatever.&lt;br /&gt;
&lt;br /&gt;
The magic number must be followed by 20 bytes of additional information, like UBL executable entry point, size of the UBL, start and load addresses, flags ... TI's [http://www.ti.com/lit/pdf/sprufg5 DM36x User's Guide] has all the details, chapter 11.2.5, page 188.&lt;br /&gt;
&lt;br /&gt;
After having found this piece of information, the RBL acts accordingly: loads the UBL into the ARM's TCM RAM0 and RAM1 (2x 16 KiB, at address space offset 0x0000 and 0x4000 respectively) and jumps to the specified entry point.&lt;br /&gt;
&lt;br /&gt;
=== User boot loader - UBL ===&lt;br /&gt;
&lt;br /&gt;
The ''user boot loader'' (UBL) used by the F454 is called ''BUBL''.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
=== U-Boot ===&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=338</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=338"/>
		<updated>2014-12-07T20:35:52Z</updated>

		<summary type="html">&lt;p&gt;Joft: Note U-Boot binary size.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00, size 0x028270&amp;lt;br&amp;gt;U-Boot environment at offset 0x5ee00, size 0x01000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=337</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=337"/>
		<updated>2014-12-07T20:31:17Z</updated>

		<summary type="html">&lt;p&gt;Joft: Add info about suspected SPI EEPROM ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
=== eMMC ===&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at 0x00e00; U-Boot environment at offset 0x5ee00, size 0x1000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the U-Boot binary is at absolute offset 0x200 + 0xe00 = 0x1000.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
&lt;br /&gt;
For booting the F454 there is most likely an EEPROM. It is attached to interface SPI0 of the DM365. The used Linux kernel source suggests that it as a ''at25640'', 64K bits in size. However that seems to be a bit small. More likely is something like 256K ''(TODO: see section software)''.&lt;br /&gt;
&lt;br /&gt;
After power-on the DM365's ARM ROM boot loader (RBL) searches for its user boot loader (UBL). It does so via a pre-determined interface. The current assumption is that this interface is SPI. Other possibilities are for example NAND, MMC/SD, UART, ...&lt;br /&gt;
&lt;br /&gt;
In case of the F454 the only other possibility would be MMC, but on the eMMC there does not seem to be the correct magic number (0xA1ACEDxx) within the first 24 blocks. So it has to be an SPI EEPROM - for booting.&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=329</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=329"/>
		<updated>2014-11-27T22:09:07Z</updated>

		<summary type="html">&lt;p&gt;Joft: Update memory info, 128MIB total.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kiB RAM chip. A kernel commandline found within the U-Boot environment suggests that there are 128MiB of RAM. The assumption is that the rest of the RAM, up to 128MiB, is associated with the DM365's HDVICP1 co-processor - instead of being under Linux' control. &lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at ???; U-Boot environment at offset 0x5ee00, size 0x1000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=328</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=328"/>
		<updated>2014-11-27T22:03:38Z</updated>

		<summary type="html">&lt;p&gt;Joft: Add info about storage.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory ==&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kB RAM chip. So whatever size the RAM actually is - the assumption is that the rest of the RAM is associated with the DM365's HDVICP1 co-processor?&lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
The F454 includes a eMMC as non-volatile storage. It's size is 1,872 MiB (sector size: 512 byte) and is divided into essentially 6 paritions, using [http://en.wikipedia.org/wiki/Master_boot_record MBR] style:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| partition&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| start sector&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| size in sectors / in KiB&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| usage&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|4159 / 2079.5 KiB&lt;br /&gt;
|U-Boot binary at ???; U-Boot environment at offset 0x5ee00, size 0x1000&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|4160&lt;br /&gt;
|20544 / 10,272 KiB&lt;br /&gt;
|ext3, comprises recovery Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|24704&lt;br /&gt;
|409664 / 204,832 KiB&lt;br /&gt;
|ext3, recovery root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|434369&lt;br /&gt;
|20543 / 10,271.5 KiB&lt;br /&gt;
|ext3, comprises normal Linux kernel uImage&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|454913&lt;br /&gt;
|409663 / 204,831.5 KiB&lt;br /&gt;
|ext3, normal root filesystem, mounted read-only&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|864592&lt;br /&gt;
|2969264 / 1,484,632 KiB&lt;br /&gt;
|ext3, mounted on /home/bticino/cfg/extra, mounted read-write&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Further information ==&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=325</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=325"/>
		<updated>2014-11-27T09:44:37Z</updated>

		<summary type="html">&lt;p&gt;Joft: Add info about RAM and mention HDVICP1.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
/proc/meminfo lets us assume the SoC is equipped with most likely &amp;gt;102 MB of RAM:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:/sys/devices/virtual/gpio# cat /proc/meminfo | head -n 1&lt;br /&gt;
MemTotal:         103968 kB&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obviously there is no such thing as a 103968 kB RAM chip. So whatever size the RAM actually is - the assumption is that the rest of the RAM is associated with the DM365's HDVICP1 co-processor?&lt;br /&gt;
&lt;br /&gt;
The HDVICP1 is a 720p H264 encoder and decoder included in the DaVinci DM365 SoC. Altogether the DM365 SoC seems to be the most equipped DaVinci SoCs of it's series and time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=324</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=324"/>
		<updated>2014-11-27T09:39:37Z</updated>

		<summary type="html">&lt;p&gt;Joft: Add links to publications about F454 hardware.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The DaVinci DM365 SoC includes a 720p H264 encoder and decoder - next other co-processors and seems to belong to the group of full-featured DaVinci SoCs of it's time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
The following talk by [http://it.linkedin.com/pub/raffaele-recalcati/b/7b/3a9 Raffaele Recalcati] on [https://archive.fosdem.org/2011 FOSDEM 2011] provides some more details: [https://archive.fosdem.org/2011/schedule/event/davinci.html DaVinci dm365 for home automation] [http://free-electrons.com/pub/video/2011/fosdem/fosdem2011-recalcati-home-automation.webm Video] [http://elinux.org/images/1/1f/Basi_and_dingo.pdf Slides] ''(English)''.&lt;br /&gt;
However it does not explicitly mention the F454. It includes background information, development history and even block diagrams.&lt;br /&gt;
From the same author there is a presentation from 2012 called [http://www.gl-como.it/wp-content/uploads/2012/09/Linux_in_Bticino_LinuxDay2012.pdf Linux in Bticino] ''(Italian)''. It apparently includes more of Bticino's history in home automation and even something on the userspace application stack.&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=322</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=322"/>
		<updated>2014-11-26T22:25:16Z</updated>

		<summary type="html">&lt;p&gt;Joft: More hardware info - just found answer to speed question in my notes ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo confirms:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The system includes a device called ''bt_nexmed_hwmon.0''. It is registered as a Linux hardware monitoring device and provides further information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cd /sys/devices/platform/bt_nexmed_hwmon.0&lt;br /&gt;
root@basi:/sys/devices/platform/bt_nexmed_hwmon.0# ls in* temp*&lt;br /&gt;
in1_input    in1_label    in2_input    in2_label    in4_input&lt;br /&gt;
in4_label    in5_input    in5_label    temp1_input  temp1_label&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| input&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| label&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| typical value&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| comment&lt;br /&gt;
|-&lt;br /&gt;
|in1&lt;br /&gt;
|Hw version&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|in2&lt;br /&gt;
|board identification&lt;br /&gt;
|BASI BOARD&lt;br /&gt;
|-&lt;br /&gt;
|in4&lt;br /&gt;
|cpu speed&lt;br /&gt;
|270MHz&lt;br /&gt;
|-&lt;br /&gt;
|in5&lt;br /&gt;
|board configuration&lt;br /&gt;
|4&lt;br /&gt;
|''unknown - what does it mean?''&lt;br /&gt;
|-&lt;br /&gt;
|temp1&lt;br /&gt;
|Temperature&lt;br /&gt;
|38&lt;br /&gt;
|''most likely in celcius?''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The DaVinci DM365 SoC includes a 720p H264 encoder and decoder - next other co-processors and seems to belong to the group of full-featured DaVinci SoCs of it's time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video door entry systems?''&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
== Tool Chain ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=318</id>
		<title>Bticino F454</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Bticino_F454&amp;diff=318"/>
		<updated>2014-11-26T10:50:52Z</updated>

		<summary type="html">&lt;p&gt;Joft: Start page about F454.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page shall be a container for various pieces of information about Bticion's F454.&lt;br /&gt;
Most of the information is - for now - derived from just poking around on the device with SSH. So, due to this and in general: of course certain details can be unsure or not accurate, because something has been overlooked.&lt;br /&gt;
&lt;br /&gt;
The F454 is a typical embedded system using a SoC and running a Linux-based system.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
The F454 is based on TI's (Texas Instruments) DaVinci [http://www.ti.com/product/tms320dm365 DM365] SoC, from 2009. The Wikipedia page [http://en.wikipedia.org/wiki/Texas_Instruments_DaVinci Texas Instruments DaVinci] can be used as a first overview.&lt;br /&gt;
&lt;br /&gt;
The SoC does include, among many peripherals, an [http://en.wikipedia.org/wiki/List_of_ARM_microarchitectures ARM processor]:&lt;br /&gt;
&lt;br /&gt;
* family: [http://en.wikipedia.org/wiki/ARM9E ARM9E]&lt;br /&gt;
* architecture: ARMv5TEJ&lt;br /&gt;
* core: ARM926EJ-S&lt;br /&gt;
&lt;br /&gt;
Apparently DM365 SoCs can run with 216 MHz, 270 MHz or 300 MHz. As of this writing it is unclear what the F454 actually uses.&lt;br /&gt;
&lt;br /&gt;
A look at Linux' /proc/cpuinfo&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@basi:~# cat /proc/cpuinfo &lt;br /&gt;
Processor	: ARM926EJ-S rev 5 (v5l)&lt;br /&gt;
BogoMIPS	: 134.34&lt;br /&gt;
Features	: swp half thumb fastmult edsp java &lt;br /&gt;
CPU implementer	: 0x41&lt;br /&gt;
CPU architecture: 5TEJ&lt;br /&gt;
CPU variant	: 0x0&lt;br /&gt;
CPU part	: 0x926&lt;br /&gt;
CPU revision	: 5&lt;br /&gt;
&lt;br /&gt;
Hardware	: BTicino BASI board&lt;br /&gt;
Revision	: 0000&lt;br /&gt;
Serial		: 0000000000000000&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''TODO: Couldn't we derive the clock speed from the BogoMIPS - at least roughly?''&lt;br /&gt;
&lt;br /&gt;
The DaVinci DM365 SoC includes a 720p H264 encoder and decoder - next other co-processors and seems to belong to the group of full-featured DaVinci SoCs of it's time (2008/2009).&lt;br /&gt;
&lt;br /&gt;
''Question: Why DM365 - why does the F454 need this 720p en/decoding capability. Wouldn't a DM355 also do it? Related to video entry systems?''&lt;br /&gt;
&lt;br /&gt;
''TODO: more''&lt;br /&gt;
&lt;br /&gt;
= Software =&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Operating System ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
''TODO''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=WHO%3D13_-_Device_Communication&amp;diff=310</id>
		<title>WHO=13 - Device Communication</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=WHO%3D13_-_Device_Communication&amp;diff=310"/>
		<updated>2014-11-23T13:10:48Z</updated>

		<summary type="html">&lt;p&gt;Joft: Add DIMENSION codes found by experiment, missing from current official documentation.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;WHO 13 let's you communicate with your gateway or scenario manager.&lt;br /&gt;
&lt;br /&gt;
== We start with an Example ==&lt;br /&gt;
To find out what type of gateway and/or scenario manager you have, just send the message '''&amp;lt;tt&amp;gt;*#13**15##&amp;lt;/tt&amp;gt;''' to your device, for example:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;echo &amp;quot;*#13**15##&amp;quot; | netcat 192.168.60.201 20000&amp;lt;/source&amp;gt;&lt;br /&gt;
This gives you a similar answer like this:&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:#000000;color:#EEEEEE;&amp;quot;&amp;gt;*#*1##*#13**15*12##*#*1##&amp;lt;/pre&amp;gt;&lt;br /&gt;
My device is shown as '''12''', looking up in the Device Table below, the device must be a F453AV&lt;br /&gt;
&lt;br /&gt;
== ATTRIBUTE Table ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| ATTRIBUTE&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Description&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| R/W&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Syntax&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|0&lt;br /&gt;
|Time&lt;br /&gt;
|R/W &lt;br /&gt;
|Get Time: *#13**0##&amp;lt;br&amp;gt;Set Time: *#13**#0*H*m*S*T##&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|1&lt;br /&gt;
|Date&lt;br /&gt;
|R/W&lt;br /&gt;
|Get Date: *#13**1##&amp;lt;br&amp;gt;Set Date: *#13**#1*W*D*M*Y##&lt;br /&gt;
|-&lt;br /&gt;
|10&lt;br /&gt;
|IP address&lt;br /&gt;
|R&lt;br /&gt;
|Get IP address: *#13**10##&lt;br /&gt;
|-&lt;br /&gt;
|11&lt;br /&gt;
|Net mask&lt;br /&gt;
|R&lt;br /&gt;
|Get Net mask: *#13**11##&lt;br /&gt;
|-&lt;br /&gt;
|12&lt;br /&gt;
|MAC address&lt;br /&gt;
|R&lt;br /&gt;
|Get MAC address: *#13**12##&lt;br /&gt;
|-&lt;br /&gt;
|15&lt;br /&gt;
|Device Type&lt;br /&gt;
|R&lt;br /&gt;
|Get Device Type: *#13**15##&lt;br /&gt;
|-&lt;br /&gt;
|16&lt;br /&gt;
|Firmware version&lt;br /&gt;
|R&lt;br /&gt;
|Get Firmware version: *#13**16##&lt;br /&gt;
|-&lt;br /&gt;
|19&lt;br /&gt;
|Uptime&lt;br /&gt;
|R&lt;br /&gt;
|Get Uptime: *#13**19##&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|22&lt;br /&gt;
|Date and Time&lt;br /&gt;
|R/W&lt;br /&gt;
|Get DateTime: *#13**22##&amp;lt;br&amp;gt;Set DateTime: *#13**#1*H*m*S*T*W*D*M*Y#&lt;br /&gt;
|-&lt;br /&gt;
|23&lt;br /&gt;
|Kernel Version&lt;br /&gt;
|R&lt;br /&gt;
|Get Kernel Version: *#13**23##&lt;br /&gt;
|-&lt;br /&gt;
|24&lt;br /&gt;
|Distribution Version&lt;br /&gt;
|R&lt;br /&gt;
|Get Distribution Version: *#13**24##&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The following attributes (DIMENSION codes) are '''not''' mentioned in the official documentation. However when looking at the results of requests using these codes their meaning seems obvious.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| ATTRIBUTE&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Description&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| R/W&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Syntax&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Comment&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|17&lt;br /&gt;
|Hardware Version&lt;br /&gt;
|R&lt;br /&gt;
|Get Hardware Version: *#13**17##&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|20&lt;br /&gt;
|Micro Version&lt;br /&gt;
|R&lt;br /&gt;
|Get Micro Version: *#13**20##&lt;br /&gt;
|most likely: version of SCS bus micro controller firmware&lt;br /&gt;
|-&lt;br /&gt;
|50&lt;br /&gt;
|Gateway IP address&lt;br /&gt;
|R&lt;br /&gt;
|Get Gateway IP address: *#13**50##&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|51&lt;br /&gt;
|DNS IP address 1&lt;br /&gt;
|R&lt;br /&gt;
|Get DNS IP address 1: *#13**51##&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|52&lt;br /&gt;
|DNS IP address 2&lt;br /&gt;
|R&lt;br /&gt;
|Get DNS IP address 2: *#13**52##&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| VALUE&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Description&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Info&lt;br /&gt;
|-&lt;br /&gt;
|H&lt;br /&gt;
|Hour&lt;br /&gt;
|2-digit value&lt;br /&gt;
|-&lt;br /&gt;
|m&lt;br /&gt;
|Minute&lt;br /&gt;
|2-digit value&lt;br /&gt;
|-&lt;br /&gt;
|S&lt;br /&gt;
|Second&lt;br /&gt;
|2-digit value&lt;br /&gt;
|-&lt;br /&gt;
|T&lt;br /&gt;
|Timezone&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|W&lt;br /&gt;
|Weekday&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|D&lt;br /&gt;
|Day&lt;br /&gt;
|2-digit value&lt;br /&gt;
|-&lt;br /&gt;
|M&lt;br /&gt;
|Month&lt;br /&gt;
|2-digit value&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Year&lt;br /&gt;
|4-digit value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Device Table==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| OWN-ID&lt;br /&gt;
! style=&amp;quot;text-align:left;&amp;quot;| Device&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|MHServer&lt;br /&gt;
|-&lt;br /&gt;
|4 &lt;br /&gt;
|MH200&lt;br /&gt;
|-&lt;br /&gt;
|6 &lt;br /&gt;
|F452&lt;br /&gt;
|-&lt;br /&gt;
|7 &lt;br /&gt;
|F452V&lt;br /&gt;
|-&lt;br /&gt;
|11 &lt;br /&gt;
|MHServer2&lt;br /&gt;
|-&lt;br /&gt;
|12 &lt;br /&gt;
|F453AV&lt;br /&gt;
|-&lt;br /&gt;
|13 &lt;br /&gt;
|H4684&lt;br /&gt;
|-&lt;br /&gt;
|15 &lt;br /&gt;
|F427 (Gateway Open-KNX)&lt;br /&gt;
|-&lt;br /&gt;
|16 &lt;br /&gt;
|F453&lt;br /&gt;
|-&lt;br /&gt;
|23 &lt;br /&gt;
|H4684&lt;br /&gt;
|-&lt;br /&gt;
|27 &lt;br /&gt;
|L4686SDK&lt;br /&gt;
|-&lt;br /&gt;
|44 &lt;br /&gt;
|MH200N&lt;br /&gt;
|-&lt;br /&gt;
|51 &lt;br /&gt;
|F454&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Hacks_and_Tweaks&amp;diff=309</id>
		<title>Hacks and Tweaks</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Hacks_and_Tweaks&amp;diff=309"/>
		<updated>2014-11-23T11:41:15Z</updated>

		<summary type="html">&lt;p&gt;Joft: Add note, FTP is stopped automatically.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== F454 ==&lt;br /&gt;
&lt;br /&gt;
The following sections just list various bits and pieces of information - without any specific order - regarding the bticino [http://www.homesystems-legrandgroup.com/BtHomeSystems/productDetail.action?productId=006 F454]. Of course there is always the possibility that the given information also applies to other bticino components.&lt;br /&gt;
&lt;br /&gt;
=== Known flaws ===&lt;br /&gt;
&lt;br /&gt;
==== root w/o password ====&lt;br /&gt;
At least in firmware versions v1.00.34, v1.00.37 and v1.00.45 the user ''root'' of the Linux system running on a F454 does not have a password set - by default. To be precises: It is the ''blank'' password.&lt;br /&gt;
&lt;br /&gt;
This issue has been reported to bticino via it's community forum [http://www.myopen-legrandgroup.com/ MY HOME] on 2013/12/17 23:23 (see [http://www.myopen-legrandgroup.com/community/international_my_open/international_65560/f/134/t/8589.aspx forum post]). However, there hasn't been any reaction from any bticino/legrand representative yet.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== FTP ===&lt;br /&gt;
&lt;br /&gt;
All bticino gateway devices, not only the F454, use FTP for configuration up- and download. However the FTP server daemon is not running by default. It is ''started'' by configuration software, like TiF454, when doing a configuration up- or download - via a OWN WHO=13 command (DIMENSION WRITING, DIMENSION 31, VAL1 0):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;*#13**#31*0##&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that DIMENSION 34 also seems to have something to do with ''starting'' the FTP server daemon. However it remains unclear what and why.&lt;br /&gt;
&lt;br /&gt;
It can also be ''stopped'' again (DIMENSION WRITING, DIMENSION 33, VAL1 0):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;*#13**#33*0##&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that it seems to be ''stopped'' automatically after about 10 minutes - after having opened and closed a FTP connection.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== SSH ===&lt;br /&gt;
&lt;br /&gt;
startssh is a &amp;quot;custom app&amp;quot; for the bticino F454. Its purpose is to start the SSH daemon &amp;quot;dropbear&amp;quot; at startup to allow SSH logins. dropbear is actually already part of the F454 firmware (known: v1.00.34, v1.00.37), but not started automatically for unknown reasons.&lt;br /&gt;
&lt;br /&gt;
The source code can be downloaded here:&lt;br /&gt;
&lt;br /&gt;
https://github.com/joft/f454utils&lt;br /&gt;
&lt;br /&gt;
To get started please have a look at the [https://github.com/joft/f454utils/blob/master/apps/startssh/README README] file.&lt;br /&gt;
&lt;br /&gt;
''TODO for joft: Basically include README text here - or at least essential parts.''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Hacks_and_Tweaks&amp;diff=308</id>
		<title>Hacks and Tweaks</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Hacks_and_Tweaks&amp;diff=308"/>
		<updated>2014-11-23T11:36:13Z</updated>

		<summary type="html">&lt;p&gt;Joft: Add how to start FTP on F454.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== F454 ==&lt;br /&gt;
&lt;br /&gt;
The following sections just list various bits and pieces of information - without any specific order - regarding the bticino [http://www.homesystems-legrandgroup.com/BtHomeSystems/productDetail.action?productId=006 F454]. Of course there is always the possibility that the given information also applies to other bticino components.&lt;br /&gt;
&lt;br /&gt;
=== Known flaws ===&lt;br /&gt;
&lt;br /&gt;
==== root w/o password ====&lt;br /&gt;
At least in firmware versions v1.00.34, v1.00.37 and v1.00.45 the user ''root'' of the Linux system running on a F454 does not have a password set - by default. To be precises: It is the ''blank'' password.&lt;br /&gt;
&lt;br /&gt;
This issue has been reported to bticino via it's community forum [http://www.myopen-legrandgroup.com/ MY HOME] on 2013/12/17 23:23 (see [http://www.myopen-legrandgroup.com/community/international_my_open/international_65560/f/134/t/8589.aspx forum post]). However, there hasn't been any reaction from any bticino/legrand representative yet.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== FTP ===&lt;br /&gt;
&lt;br /&gt;
All bticino gateway devices, not only the F454, use FTP for configuration up- and download. However the FTP server daemon is not running by default. It is ''started'' by configuration software, like TiF454, when doing a configuration up- or download - via a OWN WHO=13 command (DIMENSION WRITING, DIMENSION 31, VAL1 0):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;*#13**#31*0##&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that DIMENSION 34 also seems to have something to do with ''starting'' the FTP server daemon. However it remains unclear what and why.&lt;br /&gt;
&lt;br /&gt;
It can also be ''stopped'' again (DIMENSION WRITING, DIMENSION 33, VAL1 0):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;*#13**#33*0##&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== SSH ===&lt;br /&gt;
&lt;br /&gt;
startssh is a &amp;quot;custom app&amp;quot; for the bticino F454. Its purpose is to start the SSH daemon &amp;quot;dropbear&amp;quot; at startup to allow SSH logins. dropbear is actually already part of the F454 firmware (known: v1.00.34, v1.00.37), but not started automatically for unknown reasons.&lt;br /&gt;
&lt;br /&gt;
The source code can be downloaded here:&lt;br /&gt;
&lt;br /&gt;
https://github.com/joft/f454utils&lt;br /&gt;
&lt;br /&gt;
To get started please have a look at the [https://github.com/joft/f454utils/blob/master/apps/startssh/README README] file.&lt;br /&gt;
&lt;br /&gt;
''TODO for joft: Basically include README text here - or at least essential parts.''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Hacks_and_Tweaks&amp;diff=307</id>
		<title>Hacks and Tweaks</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Hacks_and_Tweaks&amp;diff=307"/>
		<updated>2014-11-23T11:08:40Z</updated>

		<summary type="html">&lt;p&gt;Joft: Start known flaws section - root w/o password issue.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== F454 ==&lt;br /&gt;
&lt;br /&gt;
=== Known flaws ===&lt;br /&gt;
&lt;br /&gt;
==== root w/o password ====&lt;br /&gt;
At least in firmware versions v1.00.34, v1.00.37 and v1.00.45 the user ''root'' of the Linux system running on a F454 does not have a password set - by default. To be precises: It is the ''blank'' password.&lt;br /&gt;
&lt;br /&gt;
This issue has been reported to bticino via it's community forum [http://www.myopen-legrandgroup.com/ MY HOME] on 2013/12/17 23:23 (see [http://www.myopen-legrandgroup.com/community/international_my_open/international_65560/f/134/t/8589.aspx forum post]). However, there hasn't been any reaction from any bticino/legrand representative yet.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== SSH ===&lt;br /&gt;
&lt;br /&gt;
startssh is a &amp;quot;custom app&amp;quot; for the bticino F454. Its purpose is to start the SSH daemon &amp;quot;dropbear&amp;quot; at startup to allow SSH logins. dropbear is actually already part of the F454 firmware (known: v1.00.34, v1.00.37), but not started automatically for unknown reasons.&lt;br /&gt;
&lt;br /&gt;
The source code can be downloaded here:&lt;br /&gt;
&lt;br /&gt;
https://github.com/joft/f454utils&lt;br /&gt;
&lt;br /&gt;
To get started please have a look at the [https://github.com/joft/f454utils/blob/master/apps/startssh/README README] file.&lt;br /&gt;
&lt;br /&gt;
''TODO for joft: Basically include README text here - or at least essential parts.''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
	<entry>
		<id>http://www.pimyhome.org/wiki/index.php?title=Hacks_and_Tweaks&amp;diff=229</id>
		<title>Hacks and Tweaks</title>
		<link rel="alternate" type="text/html" href="http://www.pimyhome.org/wiki/index.php?title=Hacks_and_Tweaks&amp;diff=229"/>
		<updated>2014-11-20T22:11:29Z</updated>

		<summary type="html">&lt;p&gt;Joft: Start Hacks&amp;amp;Tweaks page: minimal first text about F454 startssh app.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== F454 ==&lt;br /&gt;
&lt;br /&gt;
=== SSH ===&lt;br /&gt;
&lt;br /&gt;
startssh is a &amp;quot;custom app&amp;quot; for the bticino F454. Its purpose is to start the SSH daemon &amp;quot;dropbear&amp;quot; at startup to allow SSH logins. dropbear is actually already part of the F454 firmware (known: v1.00.34, v1.00.37), but not started automatically for unknown reasons.&lt;br /&gt;
&lt;br /&gt;
The source code can be downloaded here:&lt;br /&gt;
&lt;br /&gt;
https://github.com/joft/f454utils&lt;br /&gt;
&lt;br /&gt;
To get started please have a look at the [https://github.com/joft/f454utils/blob/master/apps/startssh/README README] file.&lt;br /&gt;
&lt;br /&gt;
''TODO for joft: Basically include README text here - or at least essential parts.''&lt;/div&gt;</summary>
		<author><name>Joft</name></author>
		
	</entry>
</feed>