Archive

Posts Tagged ‘kernel’

Embedded Linux Conference 2014 Schedule

April 19th, 2014 No comments

The Tenth Embedded Linux Conference (ELC 2014) will take place on April 29 – May 1, 2014 at the San Jose Marriott in San Jose, California. The event will feature 90+ sessions on embedded Linux, Android and IoT with over 450 attendees expected to attend. It will also be co-located with Android Builders Summit and the AllSeen Alliance Hackfest. Even if you can’t attend it’s still interesting to see what will be discussed at the event to get a grasp of on-going developments, learn a few things about different optimization techniques, and so on. So I’ve gone through the sessions’ description, and I’ve designed my own virtual schedule with sessions that could be of interest.

Embedded_Linux_Conference_2014April 29

Linux has taken the embedded world by storm.  Billions (with a ‘B’) of devices have now shipped with a Linux kernel, and it seems unstoppable.  But will the next 10 billion devices ship with Linux or with something else?  How can Linux be specialized for deeply embedded projects, as characterized by the Internet of Things, while still maintaining the network effects of community cooperation and sharing?  Is this possible or even desirable?  The startling truth might be revealed at this keynote. Or, Tim might just rant a bit about device-tree… who knows?

The past year has seen a remarkable growth of interest in super-low-power and super-low-form-factor computing, in the form of ‘wearables’, the ‘Internet of Things’, and the release of exciting new hardware such as Intel’s Quark and Edison SoCs. Taking advantage of this super-small hardware also implies the need for super-small operating systems and applications to match. This talk will describe a super-small-footprint Linux distribution called ‘microYocto”. The main focus will be the kernel and how we achieved what we think is close to the minimal possible kernel footprint, both in terms of static text size and dynamic memory usage. We’ll talk about the tools and methodologies we used and developed to analyze the problem, such as tracing and machine simulation, and will describe the various technologies developed and applied to achieving this minimalistic system.

Many community resources exist about boot time reduction. However, few of them are up to date and share the exact time savings that can be achieved on recent systems. This talk will detail today’s most efficient techniques to reduce boot time. For each of them, figures will be shared, obtained from recent boot time reduction projects and from the preparation of Free Electrons new workshop on this topic. If you attend this talk, you will know which optimization techniques are worth using first, and will save time not exploring techniques that won’t make a significant difference in your project. Don’t tell your boss, and this will leave your more time to contribute to community projects!

In this talk, Chris will describe the internal workings of the Android graphics stack from the Application layer down through the stack to pixels on the screen. It is a fairly complex journey, taking in two different 2D rendering engines, applications calling OpenGL ES directory, passing buffers on to the system compositor, Surface Flinger, and then down to the display controller or frame buffer. All this requires careful synchronisation so that what appears on the screen is smooth, without jitter, and makes efficient use of memory, CPU, GPU and power resources.

Linux-based platforms such as the Beaglebone and Raspberry Pi are inexpensive powerhouses. But, beyond being cool on their own, what else can you do with them? This presentation will step you through the process of building a Wi-Fi enabled, Linux-based robot that you can build without breaking the bank and without special knowledge of robotics and robotic controls.

Since last year, we have been working on supporting the SoCs from Allwinner, a Chinese SoC vendor, in the mainline kernel. These SoCs are cheap, wide-spread, backed by a strong community and, until last year, only supported by an out-of-tree kernel. Through this talk, we would like to share the status of this effort: where we were a year ago, what solutions were in place, where we are currently, and what to expect from the future. We will also focus on the community around these SoCs, the work that is done there, etc.

April 30

GCC is an optimizing compiler, currently most common compiler to build software for Embedded Linux systems like Android, Yocto Project etc. This tutorial will introduce specific optimizations and features of GCC which are less known but could benefit optimizing software especially for embedded use while highlight the effect of common optimizations. While it will focus on squeezing most out of GCC, it will also cover some of “pessimizations” to avoid and will tip the developer to write code thats more conducive (compiler friendly) for general optimizations. They will also get some contrast with other compilers when needed.

Throughout the last two years, a team of engineers at Free Electrons has been involved in mainlining the support for several ARM processors from Marvell, converting the not-so-great vendor-specific BSP into mainline quality code progressively merged upstream. This effort of several hundreds working days, has led to the integration of hundreds of patches in the kernel. Through this talk we would like to share some lessons learned regarding this mainlining effort, which could be useful to other engineers involved in ARM SoC support, as well as detail the steps we have gone through, the mistakes we’ve made and how we solved them, and generally our experience on this project.

This BoFs is intended to bring together anybody that tests the Linux kernel to share best practices and brainstorm new ideas. Topics may range from .config testing, module/built-in drivers, test methods and tools for testing specific driver subsystems, VM/scheduler/interrupt stress testing, and beyond. The discussion is targeted at Linux kernel developers, test engineers, and embedded Linux product teams/consultants with the common task of testing Linux kernel integrity. Attendees should have a firm grasp of building and deploying the kernel as well as kernel/userspace kernel APIs.

Several vendors are getting ready to start enabling the upstream kernel for their upcoming 64-bit ARM platforms, and it opens up a few questions on things that are not quite sorted out yet, especially on the embedded and mobile platforms. This is an open discussion on the issues these maintainers are anticipating, and what we should do about it.

Communication between components is necessary for effective power management in mobile devices. The System Power Management Interface, also known as SPMI, is a standardized bus interface intended to provide power-management related connectivity between components. Josh Cartwright will provide a high-level architectural overview of SPMI and discuss how to leverage the Linux Kernel software interfaces (expected to land in 3.15) to communicate with devices on the bus.

May 1

While Android has been created for mobile devices — phones first and now tablets — it can, nonetheless, be used as the basis of any touch-screen system, whether it be mobile or not. Essentially, Android is a custom-built embedded Linux distribution with a very elaborate and rich set of user-space abstractions, APIs, services and virtual machine. This one-day workshop is aimed at embedded developers wanting to build embedded systems using Android. It will cover Android from the ground up, enabling developers to get a firm hold on the components that make up Android and how they need to be adapted to an embedded system. Specifically, we will start by introducing Android’s overall architecture and then proceed to peel Android’s layer one-by-one.

This half-day workshop is aimed at embedded developers that want to use Android in their embedded designs.

The MIPS processor cores are widely used in embedded platforms, including TVs and set-top-boxes. In most of those platforms dedicated graphics hardware exists but it may be specialized for its use in audio and video signal processing: rendering of web content has to be done in software. We implemented optimizations for the software-based QPainter renderer to improve the performance of Qt —including QtWebKit— in MIPS processors. The target platform was the modern 74kf cores, which include new SIMD instructions suitable for graphics operations (alpha blending, color space conversion and JPEG image decoding), and also for non-graphics operations: string functions were also improved. Our figures estimate that web pages are rendered up to 30% faster using hand-coded assembler fast-paths for those operations.

Software Freedom Conservancy announced last year a renewed effort for cross-project collaborative GPL compliance efforts, including copyright holders from BusyBox, Linux, and Samba. Conservancy uses an internal system of communication and collaboration to take input from stakeholders to discuss and engage in compliance activity to ensure compliance with the GPL throughout the technology industry and particularly in the embedded device market. Compliance with the GPL is the responsibility of copyright holders of the software, and Conservancy helps those copyright holders pursue the work, so those developers can focus on coding. In this talk, the President of Conservancy will discuss how Conservancy handles compliance matters, what matters it focuses on, and how the copyright holders that work with Conservancy engage in a collaborative effort to ensure compliance with the GPL.

Ubuntu Touch is the new Ubuntu-based OS for phones and tablets. Announced at the beginning of 2013, it gives a new UI and design proposal, but also a new way of developing and supporting many different devices, using either the Android HAL or the traditional Linux stack to build the platform. This talk will go over the Ubuntu Touch internals, presenting the technical decisions and also the work that was done to bootstrap this new platform (camera, radio, video decode, GLES and etc) and the future challenges to support a single stack across mobile and the traditional desktop.

These are just a few sessions out of the 90+ sessions available at the Embedded Linux Conference and Android Builder Summit. You can check the full schedule to find out which sessions are most interesting to you.

If you’d like to attend the event, you’ll need to register online.

The attendance fees have significantly gone up compared to last year, at least for hobbyists, but include entrance for both ELC and Android Builder Summit:

  • Professional Registration Fee - US$600 (Was US$500 until March 29, 2014)
  • Hobbyist Fee – US$150
  • Student FeeUS$150

After the events, many videos are usually uploaded by the Linux Foundation, and you should be able to find the list of talks with links to presentation slides oneLinux.org.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter

Atmel SAMA5D3 Xplained Board Unboxing and Quick Start Guide

April 16th, 2014 No comments

Atmel SAMA5D3 Xplained is an evaluation board running Linux powered by SAMA5D36 ARM Cortex A5 micro-processor with 256 MB DDR2, 256 MB flash, two Ethernet ports, 3 USB connectors, and more. This embedded board targets industrial automation, networks, robotics, control panels and wearable applications. The only video output is an LCD connector so it is reserved for headless or flat panel based applications. You can check full specs on my Atmel SAMA5D3 Xplained announcement post. The company kindly sent me a sample, so that I can share my experience with the board. I’ll first post some unboxing pictures, show how to get started with the pre-installed image, and build my own Linux image.

The board can be purchased for $79 from Atmel e-Store, as well as several distributors (P/N: ATSAMA5D3-XPLD).

Atmel SAMA5D3 Xplained Unboxing

I’ve been sent the board via DHL in the following package, which gives  a short desscription of the board, and what it is used for. There’s also a QR core, but it just returns the board name of some production numbers and dates, no links.

Atmel_SAMA5D3_Xplained_PackageIn the package you’ve got the board, a micro USB to USB cable for power and programming, and a small card entitled “Overview and Compliance Information” which gives a list of key features, a link to get started http://www.atmel.com/sama5d3xplained, which I’ll use later, and some EU compliance informations regarding RoHS2 and EMC. The board is compliant with both CE and FCC standards.

Atmel SAMA5D3 Xplained Package Content (Click to Enlarge)

Atmel SAMA5D3 Xplained Package Content (Click to Enlarge)

Let’s check the board in details.

Top of Atmel SAMA5D3 Xplained Board (Click to Enlarge)

Top of Atmel SAMA5D3 Xplained Board (Click to Enlarge)

On the top of the board, we’ll find the 2 USB host connectors, and 2 Ethernet connectors (GMAC and EMAC) on the right, the micro USB port, as well as pads to solder an external power supply and a micro SD slot on the left, reset, wake up and user buttons, as well as JTAG, LCD, and debug (serial) connectors at the bottom, and around the MPU and memories, the Arduino UNO R3 compatible headers with the names of the different pins. Bear in mind these only support 3.3V, not 5V.

Bottom of Atmel SAMA5D3 Xplained (Click to Enlarge)

Bottom of Atmel SAMA5D3 Xplained (Click to Enlarge)

On the back we’ll find the SD card slot, and again, the markings for the Arduino compatible connectors.

I’ve also shot an unboxing video for those interested.

Atmel SAMA5D3 Xplained Quick Start Guide

From the link provided on the “Overview card”, you can download SAMA5D3 MPU datasheet,  the board brief, design and manufacturing files, and user’s guide, as well as a Getting Started Guide, which I’ll try out in this post.

The board comes pre-loaded with a Linux distribution (poky) built with the Yocto Project comprised of bootloaders (AT91Bootstrap and U-boot), the Linux kernel, and a custom lightweight rootfs. To get started simply connect the micro USB to USB cable to your computer to boot the system, you should see a blue LED lit up and blink. There’s no display, but there are three ways to access the board from Linux or Windows computers:

  • Using the USB connection your PC.  In Linux, run dmesg to check the latest kernel messages:
    [92045.134415] usb 1-1.4.4: new high-speed USB device number 23 using ehci-pci
    [92045.227589] usb 1-1.4.4: New USB device found, idVendor=0525, idProduct=a4a7
    [92045.227598] usb 1-1.4.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
    [92045.227603] usb 1-1.4.4: Product: Gadget Serial v2.4
    [92045.227607] usb 1-1.4.4: Manufacturer: Linux 3.10.0-yocto-standard with atmel_usba_udc
    [92045.334096] cdc_acm 1-1.4.4:2.0: This device cannot do calls on its own. It is not a modem.
    [92045.334265] cdc_acm 1-1.4.4:2.0: ttyACM0: USB ACM device

    In my case the interface is /dev/ttyACM0. Run you favorite terminal emulator program, such as minicom, picocom, screen, PuTTY, etc… I’ve used minicom, and configured it to access /dev/TTYACM0 using 115200 8/N/1 configuration. Instructions for Windows can be found in the company’s Getting Started Guide.

  • Via a USB to Serial board connected via J23 header’s Tx, Rx and GND pins. I’ve also done this in minicom with /dev/ttyUSB0 and the same 115200 8/N/1 configuration.
  • Via SSH. The demo image in the board is running sshd, so provided you’ve connected one or two of the Ethernet ports on a LAN with a DHCP server, you should be able to connect with the IP of the board. In Linux: ssh root@ip_address

You can login with the board using the root account without password. The USB and SSH methods are the most convenience since you don’t need to connect extra hardware, but you won’t be able to access the bootloader that way, debugging the Linux kernel, if needed, will be difficult, and each time, the board is rebooted, the connection will be lost. So for development, you should really get a serial to USB debug board.

Here’s the complete boot log for reference:

AT91Bootstrap 3.6.1-00078-g5415d4e (Tue Feb  4 15:36:46 CET 2014)

NAND: ONFI flash detected
NAND: Manufacturer ID: 0x2c Chip ID: 0×32
NAND: Disable On-Die ECC
NAND: Initialize PMECC params, cap: 0×4, sector: 0×200
NAND: Image: Copy 0×80000 bytes from 0×40000 to 0x26f00000
NAND: Done to load image

U-Boot 2013.07 (Feb 04 2014 – 15:36:32)

CPU: SAMA5D36
Crystal frequency:       12 MHz
CPU clock        :      528 MHz
Master clock     :      132 MHz
DRAM:  256 MiB
NAND:  256 MiB
MMC:   mci: 0, mci: 1
*** Warning – bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   gmac0
Warning: failed to set MAC address
, macb0
Warning: failed to set MAC address

Hit any key to stop autoboot:  0

NAND read: device 0 offset 0×180000, size 0×80000
524288 bytes read: OK

NAND read: device 0 offset 0×200000, size 0×600000
6291456 bytes read: OK
Kernel image @ 0×22000000 [ 0x000000 - 0x33be28 ]
## Flattened Device Tree blob at 21000000
Booting using the fdt blob at 0×21000000
Loading Device Tree to 2bb12000, end 2bb1a046 … OK

Starting kernel …

Uncompressing Linux… done, booting the kernel.
Booting Linux on physical CPU 0×0
Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Initializing cgroup subsys cpuacct
Linux version 3.10.0-yocto-standard (nferre@tenerife) (gcc version 4.8.1 (GCC) 4
CPU: ARMv7 Processor [410fc051] revision 1 (ARMv7), cr=50c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine: Atmel SAMA5 (Device Tree), model: SAMA5D3 Xplained
bootconsole [earlycon0] enabled
Memory policy: ECC disabled, Data cache writeback
AT91: Detected soc type: sama5d3
AT91: Detected soc subtype: sama5d36
AT91: sram at 0×300000 of 0×20000 mapped at 0xfef58000
CPU: All CPU(s) started in SVC mode.
Clocks: CPU 528 MHz, master 132 MHz, main 12.000 MHz
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 65024
Kernel command line: console=ttyS0,115200 earlyprintk mtdparts=atmel_nand:256k(s
PID hash table entries: 1024 (order: 0, 4096 bytes)
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
allocated 524288 bytes of page_cgroup
please try ‘cgroup_disable=memory’ option if you don’t want memory cgroups
Memory: 256MB = 256MB total
Memory: 252736k/252736k available, 9408k reserved, 0K highmem
Virtual kernel memory layout:
vector  : 0xffff0000 – 0xffff1000   (   4 kB)
fixmap  : 0xfff00000 – 0xfffe0000   ( 896 kB)
vmalloc : 0xd0800000 – 0xff000000   ( 744 MB)
lowmem  : 0xc0000000 – 0xd0000000   ( 256 MB)
modules : 0xbf800000 – 0xc0000000   (   8 MB)
.text : 0xc0008000 – 0xc05b4fc8   (5812 kB)
.init : 0xc05b5000 – 0xc05d2d60   ( 120 kB)
.data : 0xc05d4000 – 0xc063a9f8   ( 411 kB)
.bss : 0xc063a9f8 – 0xc0663820   ( 164 kB)
NR_IRQS:16 nr_irqs:16 16
sched_clock: 32 bits at 100 Hz, resolution 10000000ns, wraps every 4294967286ms
Console: colour dummy device 80×30
Calibrating delay loop… 351.43 BogoMIPS (lpj=1757184)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
Initializing cgroup subsys memory
Initializing cgroup subsys devices
Initializing cgroup subsys freezer
Initializing cgroup subsys blkio
CPU: Testing write buffer coherency: ok
Setting up static identity map for 0xc0350648 – 0xc0350694
devtmpfs: initialized
pinctrl core: initialized pinctrl subsystem
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
AT91: Power Management
gpio-at91 fffff200.gpio: at address fefff200
gpio-at91 fffff400.gpio: at address fefff400
gpio-at91 fffff600.gpio: at address fefff600
gpio-at91 fffff800.gpio: at address fefff800
gpio-at91 fffffa00.gpio: at address fefffa00
pinctrl-at91 pinctrl.2: initialized AT91 pinctrl driver
bio: create slab <bio-0> at 0
at_hdmac ffffe600.dma-controller: Atmel AHB DMA Controller ( cpy slave ), 8 chas
at_hdmac ffffe800.dma-controller: Atmel AHB DMA Controller ( cpy slave ), 8 chas
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
of_dma_request_slave_channel: dma-names property missing or empty
at91_i2c f0014000.i2c: can’t get a DMA channel for tx
at91_i2c f0014000.i2c: can’t use DMA
at91_i2c f0014000.i2c: AT91 i2c bus driver.
at91_i2c f0018000.i2c: using dma0chan0 (tx) and dma0chan1 (rx) for DMA transfers
at91_i2c f0018000.i2c: AT91 i2c bus driver.
at91_i2c f801c000.i2c: can’t get a DMA channel for tx
at91_i2c f801c000.i2c: can’t use DMA
at91_i2c f801c000.i2c: AT91 i2c bus driver.
media: Linux media interface: v0.10
Linux video capture interface: v2.00
Advanced Linux Sound Architecture Driver Initialized.
Bluetooth: Core ver 2.16
NET: Registered protocol family 31
Bluetooth: HCI device and connection manager initialized
Bluetooth: HCI socket layer initialized
Bluetooth: L2CAP socket layer initialized
Bluetooth: SCO socket layer initialized
cfg80211: Calling CRDA to update world regulatory domain
Switching to clocksource tcb_clksrc
NET: Registered protocol family 2
TCP established hash table entries: 2048 (order: 2, 16384 bytes)
TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
TCP: Hash tables configured (established 2048 bind 2048)
TCP: reno registered
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
jffs2: version 2.2. (NAND) �© 2001-2006 Red Hat, Inc.
msgmni has been set to 493
io scheduler noop registered (default)
f001c000.serial: ttyS1 at MMIO 0xf001c000 (irq = 23) is a ATMEL_SERIAL
f0020000.serial: ttyS2 at MMIO 0xf0020000 (irq = 24) is a ATMEL_SERIAL
f0024000.serial: ttyS5 at MMIO 0xf0024000 (irq = 25) is a ATMEL_SERIAL
ffffee00.serial: ttyS0 at MMIO 0xffffee00 (irq = 39) is a ATMEL_SERIAL
console [ttyS0] enabled, bootconsole disabled
console [ttyS0] enabled, bootconsole disabled
brd: module loaded
loop: module loaded
atmel_nand_nfc 70000000.nfc: NFC is probed.
atmel_nand: Use On Flash BBT
atmel_nand 60000000.nand: Using dma0chan2 for DMA transfers.
ONFI param page 0 valid
ONFI flash detected
NAND device: Manufacturer ID: 0x2c, Chip ID: 0xda (Micron MT29F2G08ABAEAWP), 254
atmel_nand 60000000.nand: ONFI params, minimum required ECC: 4 bits in 512 bytes
atmel_nand 60000000.nand: Initialize PMECC params, cap: 4, sector: 512
atmel_nand 60000000.nand: Using NFC Sram read and write
Bad block table found at page 131008, version 0×01
Bad block table found at page 130944, version 0×01
nand_read_bbt: bad block at 0x000000c80000
nand_read_bbt: bad block at 0x000000ca0000
8 cmdlinepart partitions found on MTD device atmel_nand
Creating 8 MTD partitions on “atmel_nand”:
0×000000000000-0×000000040000 : “bootstrap”
0×000000040000-0x0000000c0000 : “uboot”
0x0000000c0000-0×000000100000 : “env”
0×000000100000-0×000000140000 : “evn_redundent”
0×000000140000-0×000000180000 : “spare”
0×000000180000-0×000000200000 : “dtb”
0×000000200000-0×000000800000 : “kernel”
0×000000800000-0×000010000000 : “rootfs”
atmel_spi f0004000.spi: version: 0×213
atmel_spi f0004000.spi: Using dma0chan3 (tx) and dma0chan4 (rx) for DMA transfes
atmel_spi f0004000.spi: Atmel SPI Controller at 0xf0004000 (irq 18)
atmel_spi f0004000.spi: master is unqueued, this is deprecated
atmel_spi f8008000.spi: version: 0×213
atmel_spi f8008000.spi: Using dma1chan0 (tx) and dma1chan1 (rx) for DMA transfes
atmel_spi f8008000.spi: Atmel SPI Controller at 0xf8008000 (irq 28)
atmel_spi f8008000.spi: master is unqueued, this is deprecated
CAN device driver interface
at91_can f000c000.can: device registered (reg_base=d08ea000, irq=19)
at91_can f8010000.can: device registered (reg_base=d08ec000, irq=29)
macb f0028000.ethernet (unregistered net_device): invalid hw address, using ranm
libphy: MACB_mii_bus: probed
macb f0028000.ethernet eth0: Cadence GEM at 0xf0028000 irq 26 (4e:68:35:cc:0c:8)
macb f0028000.ethernet eth0: attached PHY driver [Micrel KSZ9031 Gigabit PHY] ()
macb f802c000.ethernet (unregistered net_device): invalid hw address, using ranm
libphy: MACB_mii_bus: probed
macb f802c000.ethernet eth1: Cadence MACB at 0xf802c000 irq 33 (ca:99:58:69:7f:)
macb f802c000.ethernet eth1: attached PHY driver [Micrel KSZ8081 or KSZ8091] (m)
ehci_hcd: USB 2.0 ‘Enhanced’ Host Controller (EHCI) Driver
ehci-atmel: EHCI Atmel driver
atmel-ehci 700000.ehci: EHCI Host Controller
atmel-ehci 700000.ehci: new USB bus registered, assigned bus number 1
atmel-ehci 700000.ehci: irq 47, io mem 0×00700000
atmel-ehci 700000.ehci: USB 2.0 started, EHCI 1.00
usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb1: Product: EHCI Host Controller
usb usb1: Manufacturer: Linux 3.10.0-yocto-standard ehci_hcd
usb usb1: SerialNumber: 700000.ehci
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 3 ports detected
ohci_hcd: USB 1.1 ‘Open’ Host Controller (OHCI) Driver
at91_ohci 600000.ohci: AT91 OHCI
at91_ohci 600000.ohci: new USB bus registered, assigned bus number 2
at91_ohci 600000.ohci: irq 47, io mem 0×00600000
usb usb2: New USB device found, idVendor=1d6b, idProduct=0001
usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb2: Product: AT91 OHCI
usb usb2: Manufacturer: Linux 3.10.0-yocto-standard ohci_hcd
usb usb2: SerialNumber: at91
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 3 ports detected
usbcore: registered new interface driver usb-storage
usbcore: registered new interface driver usbserial
usbcore: registered new interface driver usbserial_generic
usbserial: USB Serial support registered for generic
at91_rtc fffffeb0.rtc: rtc core: registered fffffeb0.rtc as rtc0
at91_rtc fffffeb0.rtc: AT91 Real Time Clock driver.
i2c /dev entries driver
Driver for 1-wire Dallas network protocol.
cpuidle: using governor ladder
leds-gpio leds.4: pins are not configured from the driver
atmel_aes f8038000.aes: version: 0×135
atmel_aes f8038000.aes: Atmel AES – Using dma1chan2, dma1chan3 for DMA transfers
atmel_tdes f803c000.tdes: version: 0×701
atmel_tdes f803c000.tdes: using dma1chan4, dma1chan5 for DMA transfers
atmel_tdes f803c000.tdes: Atmel DES/TDES
atmel_sha f8034000.sha: version: 0×410
atmel_sha f8034000.sha: using dma1chan6 for DMA transfers
atmel_sha f8034000.sha: Atmel SHA1/SHA256/SHA224/SHA384/SHA512
hidraw: raw HID events driver (C) Jiri Kosina
iio iio:device0: Resolution used: 12 bits
iio iio:device0: ADC Touch screen is disabled.
TCP: cubic registered
NET: Registered protocol family 10
sit: IPv6 over IPv4 tunneling driver
NET: Registered protocol family 17
can: controller area network core (rev 20120528 abi 9)
NET: Registered protocol family 29
can: raw protocol (rev 20120528)
can: broadcast manager protocol (rev 20120528 t)
can: netlink gateway (rev 20130117) max_hops=1
VFP support v0.3: implementor 41 architecture 2 part 30 variant 5 rev 1
ThumbEE CPU extension supported.
Registering SWP/SWPB emulation handler
UBI: attaching mtd7 to ubi0
atmel_nand 60000000.nand: Bit flip in data area, byte_pos: 1552, bit_pos: 7, 0xf
atmel_nand 60000000.nand: Bit flip in data area, byte_pos: 315, bit_pos: 0, 0xff
UBI: scanning is finished
UBI: attached mtd7 (name “rootfs”, size 248 MiB) to ubi0
UBI: PEB size: 131072 bytes (128 KiB), LEB size: 126976 bytes
UBI: min./max. I/O unit sizes: 2048/2048, sub-page size 2048
UBI: VID header offset: 2048 (aligned 2048), data offset: 4096
UBI: good PEBs: 1978, bad PEBs: 6, corrupted PEBs: 0
UBI: user volume: 1, internal volumes: 1, max. volumes count: 128
UBI: max/mean erase counter: 2/0, WL threshold: 4096, image sequence number: 321
UBI: available PEBs: 0, total reserved PEBs: 1978, PEBs reserved for bad PEB ha4
UBI: background thread “ubi_bgt0d” started, PID 681
input: gpio_keys.3 as /devices/gpio_keys.3/input/input0
at91_rtc fffffeb0.rtc: setting system clock to 2014-02-05 09:22:13 UTC (1391592)
atmel_mci f0000000.mmc: version: 0×505
atmel_mci f0000000.mmc: using dma0chan5 for DMA transfers
atmel_mci f0000000.mmc: Atmel MCI controller at 0xf0000000 irq 17, 1 slots
atmel_mci f8000000.mmc: version: 0×505
atmel_mci f8000000.mmc: using dma1chan7 for DMA transfers
atmel_mci f8000000.mmc: Atmel MCI controller at 0xf8000000 irq 27, 1 slots
ALSA device list:
No soundcards found.
UBIFS: mounted UBI device 0, volume 0, name “rootfs”, R/O mode
UBIFS: LEB size: 126976 bytes (124 KiB), min./max. I/O unit sizes: 2048 bytes/2s
UBIFS: FS size: 244936704 bytes (233 MiB, 1929 LEBs), journal size 9023488 byte)
UBIFS: reserved for root: 0 bytes (0 KiB)
UBIFS: media format: w4/r0 (latest is w4/r0), UUID 5CA0915B-7DF9-4652-92C0-71B9l
VFS: Mounted root (ubifs filesystem) readonly on device 0:12.
devtmpfs: mounted
Freeing unused kernel memory: 116K (c05b5000 – c05d2000)
atmel_nand 60000000.nand: Bit flip in data area, byte_pos: 1933, bit_pos: 5, 0xb
INIT: version 2.88 booting
Starting udev
udevd[717]: starting version 182
UBI error: ubi_open_volume: cannot open device 0, volume 0, error -16
atmel_usba_udc 500000.gadget: MMIO registers at 0xf8030000 mapped at d09a8000
atmel_usba_udc 500000.gadget: FIFO at 0×00500000 mapped at d2400000
g_serial gadget: Gadget Serial v2.4
g_serial gadget: g_serial ready
UBIFS: background thread “ubifs_bgt0_0″ started, PID 782
Starting Bootlog daemon: bootlogd.
g_serial gadget: high-speed config #2: CDC ACM config
Configuring network interfaces… IPv6: ADDRCONF(NETDEV_UP): eth0: link is not y
udhcpc (v1.21.1) started
Sending discover…
macb f0028000.ethernet eth0: link up (100/Full)
IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
Sending discover…
Sending select for 192.168.0.108…
Lease of 192.168.0.108 obtained, lease time 7200
/etc/udhcpc.d/50default: Adding DNS 192.168.0.1
done.
Starting rpcbind daemon…done.
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
Starting atd: OK
INIT: Entering runlevel: 5
Starting system message bus: dbus.
Starting OpenBSD Secure Shell server: sshd
done.
creating NFS state directory: done
NFS daemon support not enabled in kernel
Starting system log daemon…0
Starting kernel log daemon…0
Starting Telephony daemon
Starting Lighttpd Web Server: lighttpd.
Starting crond: OK
Stopping Bootlog daemon: bootlogd.

Poky (Yocto Project Reference Distro) 1.5.1 sama5d3_xplained /dev/ttyS0

sama5d3_xplained login: root
root@sama5d3_xplained:~#

For some reasons the Gigabit Ethernet port failed to get a link from my 10/100M switch. I had no problem with the 10/100M Ethernet port.

Let’s have a quick look at the kernel version and memory usage:

# uname -a
Linux sama5d3_xplained 3.10.0-yocto-standard #1 Wed Feb 5 10:03:20 CET 2014 armv7l GNU/Linux
# df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs          216M   80M  136M  37% /
ubi0:rootfs     216M   80M  136M  37% /
devtmpfs        124M     0  124M   0% /dev
tmpfs           124M  112K  124M   1% /run
tmpfs           124M  112K  124M   1% /var/volatile
# free -m
             total       used       free     shared    buffers     cached
Mem:           246         21        225          0          0          8
-/+ buffers/cache:         12        234
Swap:            0          0          0

So the board runs Linux 3.10 built with Yocto, has 136M free on the rootfs, and 21MB used out of 246 MB RAM.

Building the demo image for Atmel SAMA5D3 Xplained

Atmel Getting Started document mentions the software components in the NAND Flash have been compiled following instructions found on the Linux4SAM website, but instead I’ve followed the build procedure found in github.

git clone git://git.yoctoproject.org/poky
cd poky
git checkout dora-10.0.1 -b my_branch
git clone git://git.openembedded.org/meta-openembedded
cd meta-openembedded
git checkout 6572316557e742c2dc93848e4d560242bf0c3995 -b my_branch
cd ..
git clone http://github.com/linux4sam/meta-atmel
  • Initialize the build directory
source oe-init-build-env build-atmel
  • Add meta-atmel layers conf/bblayer configuration file (Lines in bold):
BBLAYERS ?= " \
  /home/jaufranc/edev/Atmel/SAMA5D3/poky/meta \
  /home/jaufranc/edev/Atmel/SAMA5D3/poky/meta-yocto \
  /home/jaufranc/edev/Atmel/SAMA5D3/poky/meta-yocto-bsp \
  /home/jaufranc/edev/Atmel/SAMA5D3/poky/meta-atmel \
  /home/jaufranc/edev/Atmel/SAMA5D3/poky/meta-openembedded/meta-oe \
  /home/jaufranc/edev/Atmel/SAMA5D3/poky/meta-openembedded/meta-networking \
  "
  • Edit conf/local.conf to specify the SAMA5D3 Xplained board, and change the package type to ipk:
[...]
MACHINE ??= "sama5d3_xplained"
[...]
PACKAGE_CLASSES ?= "package_ipk"
  • Build the demo image
bitbake atmel-xplained-demo-image

This step will take a while, and you’ll find the binary images in tmp/deploy/images/sama5d3_xplained/ including the bootloaders, the kernel, modules, device tree files, and rootfs.

  • You can also optionally build the bootloaders separately with:
bitbake at91bootstrap
bitbake u-boot

Flashing the Image

After you’ve built the image you may want to install them. You can also download the pre-built Yocto/Poky demo. I’ll use the files I’ve built, but the scripts from the pre-built demo zip file (linux4sam-poky-sama5d3_xplained-4.3.zip), since I could not find it anywhere else.

First you’ll need to install SAM-BA tool to flash the images. In Ubuntu 64-bit:

sudo apt-get install linux-image-generic linux-headers-generic ia32-libs

Download SAM-BA 2.12 for Linux and SAM-BA 2.12 Patch 6 for Linux using your web browser (registration or form filling required), and install it as follows

unzip sam-ba_2.12.zip
cp patch6.gz sam-ba_cdc_cdc_linux/
cd sam-ba_cdc_cdc_linux/
gzip -d patch6.gz
patch -p1 --binary < patch6
chmod +x sam-ba

Add sam-ba to your PATH, e.g.:

export PATH=$PATH:~/edev/Atmel/SAMA5D3/sam-ba_cdc_cdc_linux/

You’ll then need to add yourself into the dialout group inside /etc/group:

dialout:x:20:myusername

Logout and login.

Now copy demo_linux_nandflash.sh, demo_linux_nandflash.tcl and demo_script_linux_nandflash.tcl scripts from the zip file to tmp/deploy/images/sama5d3_xplained/ directory, and if needed, edit demo_linux_nandflash.tcl to match your newly built filenames:

set bootstrapFile      "sama5d3_xplained-nandflashboot-uboot-3.6.2.bin"
set ubootFile          "u-boot-sama5d3_xplained-v2013.07-at91-r2.bin"
set kernelFile         "zImage-sama5d3_xplained.bin"
set rootfsFile         "atmel-xplained-demo-image-sama5d3_xplained.ubi"

We’ve now ready for the flash procedure itself:

  1. Make sure your board is running connected to your computer via the micro USB port
  2. Remove JP5 (NAND CS, upper left of Atmel MPU) jumper to disable NAND Flash memory access
  3. Press BP2 reset button (bottom left) to boot from on-chip Boot ROM
  4. Close JP5 to enable NAND Flash memory access
  5. Change the name of copy the device tree blob file as follows:
    cp zImage-at91-sama5d3_xplained.dtb at91-sama5d3_xplained.dtb
  6. Run the flash script:
    chmod +x demo_linux_nandflash.sh
    ./demo_linux_nandflash.sh
  7. It will take a little while, and once completed you can login to the baord and verify you’ve got a brand new kernel and rootfs:
    root@sama5d3_xplained:~# uname -a                                               
    Linux sama5d3_xplained 3.10.0-custom #1 Wed Apr 16 09:31:12 ICT 2014 armv7l GNUx
    root@sama5d3_xplained:~# cat /etc/version                                       
    201404160759

You can check the flashing log in logfile.log in case something went wrong. You can find some more info on Linux4Sam SAMA5D3 Xplained page.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter

Linux Kernel 3.14 Release

April 1st, 2014 No comments

Linus Torvalds announced the release of Linux Kernel 3.14 yesterday:

So we had a few fairly late changes that I could have done without, but the changelog from -rc8 is still pretty small, and I’m feeling pretty good about it all. If we did end up with any last-minute problems due to the final spurt of patches, they’ll be pretty specific, and it really didn’t make sense to me to delay the release without anything known pending. Much of the final spurt were either marked for stable or known regressions.

So 3.14 is out there, and the merge window for 3.15 is thus open. Please do spend the time to test out 3.14, though, even if you might otherwise be in a hurry to send me your pending queue for the next release.

Linus

Kernel 3.13 brought a scalable block layer for high-performance SSDs, nftables, NFC payment support, squashfs performance improvment and more. The key changes made in Linux 3.14 are as follows:

  • Deadline scheduling class for better real-time scheduling – In Linux, users usually set scheduling priorities from a value of -20 to 19 using the nice(2) tool. The approach of process priorities is, however, not well suited for real-time tasks. Evidence Srl and the ReTiS Lab have created an alternative designed around real time concepts: deadline scheduling, implemented as a new scheduling policy, SCHED_DEADLINE. Processes provide three parameters: runtime, period, and deadline. A SCHED_DEADLINE task is guaranteed to receive “runtime” microseconds of execution time every “period” microseconds, and these “runtime” microseconds are available within “deadline” microseconds from the beginning of the period. The task scheduler uses that information to run the process with the earliest deadline, a behavior closer to the requirements needed by real-time systems. For more details about the scheduling algorithms, read the documentation, and you could also read  SCHED_DEADLINE on Wikipedia
  • zram: Memory compression mechanism considered stable – zram provides RAM block devices. Everything written to these block devices gets compressed. If zram block devices are used as swap, the system will be effectively compressing the memory it tries to swap. This effetively works as a cheap memory compression mechanism to improve reponsiveness in systems with limited amounts of memory. Zram is being used by TV companies, Android 4.4, Cyanogenmod, Chrome OS, Lubuntu… In this release, zram has been moved out of staging to drivers/block/zram.
  • Btrfs: inode properties – This release adds infrastructure to attach name/value pairs to inodes as xattrs. The purpose of these pairs is to store properties for inodes, such as compression. These properties can be inherited, this means when a directory inode has inheritable properties set, these are added to new inodes created under that directory. Subvolumes can also have properties associated with them, and they can be inherited from their parent subvolume. This release adds one specific property implementation, named “compression”, whose values can be “lzo” or “zlib” and it’s an inheritable property.
  • Trigger support for tracing events – The tracing infastructure in the Linux kernel allows to easily register probe functions as events. This release allows these events to conditionally trigger “commands”, which can take various forms. Any given trigger can additionally have an event filter, the command will only be invoked if the event being invoked passes the associated filter. For further details read Section 6 in Documentation/trace/events.txt. You may also want to read Triggers for tracing article on LWN.net.
  • Userspace probes access to all arguments -  Userspace probes are a Linux 3.5 feature that allows to set tracing probes in userspace programs at runtime. This release enables to fetch other types of argument for the uprobes: memory, stack, deference, bitfield, retval and file offset. For more details see here.
  • Userspace locking validator – The Linux kernel has a lock validator that can find locking issues at runtime. This release makes possible to run the Linux locking validator in userspace, making possible to debug locking issues in userspace programs. For more details, see User-space lockdep.
  • Kernel address space randomization – This release allows to randomize the physical and virtual address at which the kernel image is decompressed, as a security feature that deters exploit attempts relying on knowledge of the location of kernel internals. Kernel address space layout randomization
  • TCP automatic corking – When applications do consecutive small write()/sendmsg() system calls, the Linux kernel will try to coalesce these small writes as much as possible, to lower total amount of sent packets – this feature is called “automatic corking”. Automatic corking is done if at least one prior packet for the flow is waiting in Qdisc queues or device transmit queue. Applications can still use TCP_CORK for optimal behavior when they know how/when to uncork their sockets. A new sysctl (/proc/sys/net/ipv4/tcp_autocorking) has been added to control this feature, which defaults to enabled. Check the commit link for benchmarks and more details.
  • Antibufferbloat: “Proportional Integral controller Enhanced” packet scheduler – Bufferbloat is a phenomenon where excess buffers in the network cause high latency and jitter, and degrade application performance. The Linux kernel network stack has received several improvements that try to address this problem. This release adds a new network packet scheduler called PIE (Proportional Integral controller Enhanced) that can effectively control the average queueing latency to a target value. Simulation and testing have shown that PIE can ensure low latency and achieve high link utilization under various congestion situations. You may want to read a  paper about PIE from the IEEE Conference on High Performance Switching and Routing 2013 for more technical details.. There’s also an IETF draft submission. All relevant code, documents and test scripts and results can be found at ftp://ftpeng.cisco.com/pie/.

Further details on Linux 3.14 are available on Kernelnewbies.org.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter

Categories: Linux Tags: Linux, kernel, networking

Linaro 14.03 Release with Linux Kernel 3.14 and Android 4.4.2

March 28th, 2014 No comments

Linaro 14.03 has just been released with Linux Kernel 3.14-rc7 (baseline), Linux Kernel 3.10.33 (LSK), and Android 4.4.2.

This month, I could not find any major changes or updates, but work has been performed on big.LITTLE, Samsung Arndale / Arndale-octa, HiSilicon K3V2 and D01 boards and Broadcom Capri hardware, as well as ARMv8 models.

Here are the highlights of this release:

  • Linaro Stable Kernel (LSK) 3.10.33-2014.03
    • big.LITTLE support – ARM MP patch set, IKS (ARMv7 only). Interactive scheduler enhancements
    • ARMv8 features – CPU frequency scaling, CPU topology, CPU suspend
    • Power efficient workqueue support
    • Android v3.10 patch set from AOSP
    • GATOR
    • ARMv8 4xA57 4xA53 FVP (Fixed Virtual Platform) and Versatile Express TC2 support
  • Linux Linaro 3.14-rc7-2014.03
    • GATOR version 5.17
    • Android topic (linaro-android-3.14-merge) updated to get the recent code from AOSP
    • uprobes v7 (new version)
    • Updated big-LITTLE-pmu topic from ARM LT (Landing team)
    • Updated basic Capri board support from Broadcom LT (bcm590xx pmu and regulator drivers, Kona PWM controller support, and bcm21664 board added)
    • Updated big endian topic
    • Updated Arndale_Octa/Arndale/Origen patches from Samsung LT.
      • proper fix for the data abort issue on Arndale-Octa added (“ARM: dts: Disable MDMA1 node for Arndale-octa board”)
      • drivers/thermal/samsung/exynos_tmu* code cleaned up, TMU support for Exynos5420 SoCs added
    • Updated Versatile Express patches from ARM LT
    • Versatile Express arm64 support (FVP Base and Foundation models) from ARM LT
    • Updated K3V2 board support from HiSilicon LT
    • HiSilicon HiP0x Cortex A15 family / D01 Dev Board support added by HiSilicon LT
    • cortex-strings-arm64 topic (same as in 2014.02)
    • config fragments changes – Thermal config for arndale and arndale_octa enabled
  • Linaro Toolchain Binaries 2014.03
    • updated to latest Linaro TCWG (Toolchain Working Group) releases – Linaro GCC 4.8-2013.03, Linaro binutils 2.24-2014.03
    • updated Android NDK to new upstream release r9d
  • Linaro Android 14.03 – Built with Linaro GCC 4.8-2014.03, mmtest failures in LAVA have been fixed
  • Linaro OpenEmbedded 2014.03
    • integrated Linaro GCC 4.8-2013.03 and Linaro binutils 2.24-2014.03
    • added extra ACPI tools to images
    • switched recipes using git.linaro.org from git to http protocol
    • upstreaming – updated git to 1.9.0, updated FWTS (Firmware Test Suite) to 14.02.00
  • Linaro Ubuntu 14.03 – new package: xf86-video-freedreno 1.0.0, updated packages: libdrm 2.4.52 and linux-linaro kernels
  • Initial HiSilicon D01 member build is delivered
  • Arndale Octa build based on LT kernel has been setup for SWG (Security Working Group)
  • Made good progress on integrating VPS build slaves into android-build.linaro.org

You can visit https://wiki.linaro.org/Cycles/1403/Release for a list of known issues, and further release details about the LEB and community builds, Android, Kernel, Graphics, Multimedia, Landing Team, Platform, Power management and Toolchain (GCC / Qemu) components.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter

Mediatek MT6589 Linux Source Code, CyanogenMod 11 Image for Wiko Stairway Smartphone

March 13th, 2014 7 comments

Mediatek and their customers have still not gotten into the habit of complying with the GPL license, and releasing the relevant source code such as the Linux kernel. There appears to be at least one smartphone, Wiko Stairway, where the Linux kernel has been released, and chrmhoffmann, a members of XDA developers forums, has even released on unofficial CyanogenMod 11 ROM (Android 4.4.2 Kit Kat) for the device.

Mediatek_Linux_Kernel_Menuconfig

There are three source repositories for the Linux kernel, “android device“, and Android.

I’ve only looked into the kernel which is version 3.4.5. Mediatek has apparently messed up the Linux kernel quite a bit, and you’ll have to do some funny things to build the kernel, and all Mediatek options in menuconfig are in a sub-section called “Mediatek Properitary Configuration” (sic.), and it’s not possible to simply go to System Type menu to change the processor type for instance.

Let’s get the source first:

git clone https://github.com/chrmhoffmann/android_kernel_wiko_stairway
cd android_kernel_wiko_stairway/
ls
bionic  kernel  mediatek  README

So together with the kernel, we’ve got the bionic library, and the modifications done by Mediatek in the mediatek directory. The Makefile is this Linux kernel is set to use the Android gcc toolchain (arm-linux-androideabi-gcc), but I tried to build the kernel with CROSS_COMPILE=arm-linux-gnueabihf- instead, and it failed along the way with the following error:

fs/file_table.c: In function 'get_empty_filp':
 fs/file_table.c:36:20: error: inlining failed in call to always_inline 'fd_show_open_files': function body not available
 extern inline void fd_show_open_files(pid_t pid, struct files_struct *files, struct fdtable *fdt);
 ^
 fs/file_table.c:160:36: error: called from here
 fd_show_open_files(pid, files, fdt);
 ^
 make[1]: *** [fs/file_table.o] Error 1
 make: *** [fs] Error 2

This is from code added by Mediatek, and at first I just disabled it, but a similar problem occurred in the wlan drivers. Some research indicated in may be a toolchain problem, so I’ve installed the latest Linaro Android toolchain and added it to my path:

wget http://releases.linaro.org/14.02/components/android/toolchain/4.8/android-toolchain-eabi-4.8-2014.02-x86.tar.bz2
tar xvf android-toolchain-eabi-4.8-2014.02-x86.tar.bz2
export PATH=$PATH:~/edev/Mediatek/android-toolchain-eabi/bin/

And started the build:

cd kernel
TARGET_PRODUCT=wiko MTK_ROOT_CUSTOM=../mediatek/custom/ make -j8

Same error. So I gave a last try with an older Linaro Android toolchain using gcc 4.6, and this did the trick:

  LD [M]  mediatek/platform/mt6589/kernel/drivers/devapc/devapc.ko
  LD [M]  mediatek/platform/mt6589/kernel/drivers/dual_ccci/ccci_plat.ko
  LD [M]  mediatek/platform/mt6589/kernel/drivers/devinfo/devinfo.ko
  LD [M]  mediatek/platform/mt6589/kernel/drivers/gpu/pvr/mtklfb.ko
  LD [M]  mediatek/platform/mt6589/kernel/drivers/gpu/pvr/pvrsrvkm.ko
  LD [M]  mediatek/platform/mt6589/kernel/drivers/masp/sec.ko
  LD [M]  mediatek/platform/mt6589/kernel/drivers/videocodec/vcodec_kernel_driver.ko
  AS      arch/arm/boot/compressed/piggy.gzip.o
  LD      arch/arm/boot/compressed/vmlinux
  OBJCOPY arch/arm/boot/zImage
  Kernel: arch/arm/boot/zImage is ready

As for the current CM11 ROM, phone calls, SMS, data (2G, 3G), Wi-Fi, audio, and most sensors are working fine, but there’s still more work to do as the second SIM card, the camera, hardware video decoding, GPS, Bluetooth, FM radio and some MTK specific features are not supported yet. It may not be wise to try it on MT6589 hardware other than Wiko Stairway, as you may brick your device.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter

Amlogic GPL Source Code Release – Kernel 3.10, U-Boot, and Drivers (Wi-Fi, NAND, TVIN, Mali GPU)

March 10th, 2014 13 comments

Last month, I noticed Amlogic provided links to the Android SDK for S802 / M802 on their open source website, but the only way to get the source was to share your SSH public with Amlogic, so that they give you access. It did not happen, but the company has released the source for Linux 3.10.10, U-boot 2011.03, Realtek and Broadcom Wi-Fi drivers, NAND drivers, “TVIN”drivers, and kernel space GPU drivers for Mali-400 / 450 GPU. There are also some customer board files for Meson 6 only (AML8726-MX / M6) but they do not seem to match the kernel…

amlogic_kernel_m802_s802

If you want to build the kernel, including the drivers, you’ll need to download a bunch of files:

wget http://openlinux.amlogic.com:8000/download/ARM/kernel/arm-src-kernel-2014-03-06-d5d0557b2b.tar.gz
wget http://openlinux.amlogic.com:8000/download/ARM/wifi/rtk8192du-2014-03-06-7f70d95d29.tar.gz
wget http://openlinux.amlogic.com:8000/download/ARM/wifi/rtk8192eu-2014-03-06-9766866350.tar.gz
wget http://openlinux.amlogic.com:8000/download/ARM/wifi/rtk8192cu-2014-03-06-54bde7d73d.tar.gz
wget http://openlinux.amlogic.com:8000/download/ARM/wifi/rtk8188eu-2014-03-06-2462231f02.tar.gz
wget http://openlinux.amlogic.com:8000/download/ARM/wifi/brcmap6xxx-2014-03-06-302aca1a31.tar.gz
wget http://openlinux.amlogic.com:8000/download/ARM/wifi/wifi-fw-2014-03-06-d3b2263640.tar.gz
wget http://openlinux.amlogic.com:8000/download/ARM/modules/aml_tvin-2014-03-06-fb3ba6b1c8.tar.gz
wget http://openlinux.amlogic.com:8000/download/ARM/modules/aml_nand-2014-03-06-39095c4296.tar.gz
wget http://openlinux.amlogic.com:8000/download/ARM/customer/aml_customer-2014-03-06-76ce689191.tar.gz
wget http://openlinux.amlogic.com:8000/download/ARM/gpu/gpu-2014-03-06-0425a1f681.tar.gz

You’ll need to extract these tarballs in specific directories:

tar xvf arm-src-kernel-2014-03-06-d5d0557b2b.tar.gz
mkdir -p hardware/amlogic/
mkdir -p hardware/wifi/realtek/drivers
mkdir -p hardware/wifi/broadcom/drivers
mkdir -p hardware/arm/
cd hardware/amlogic
tar xvf aml_nand-2014-03-06-39095c4296.tar.gz
mv aml_nand-amlogic-nand nand
cd ../wifi/realtek/drivers
tar xvf ../../../../rtk8192du-2014-03-06-7f70d95d29.tar.gz
tar xvf ../../../../rtk8192eu-2014-03-06-9766866350.tar.gz
tar xvf ../../../../rtk8192cu-2014-03-06-54bde7d73d.tar.gz 
tar xvf ../../../../rtk8188eu-2014-03-06-2462231f02.tar.gz
mv rtk8188eu-8188eu 8188eu
mv rtk8192du-8192du 8192du
mv rtk8192cu-8192cu 8192cu
mv rtk8192eu-8192eu 8192eu
tar xvf ../../../../brcmap6xxx-2014-03-06-302aca1a31.tar.gz
cd ../../broadcom/drivers
mv brcmap6xxx-ap6xxx ap6xxx
cd ../../../arm
tar xvf ../../gpu-2014-03-06-0425a1f681.tar.gz
mv gpu-r3p2-01rel3 gpu
cd ..
mv aml_tvin-amlogic-3.10-bringup tvin

You can also extract the customer file into the kernel directory to add some drivers. As I said above I’m not sure the source code inside matches the Linux kernel 3.10.10, because there’s now device tree file for the boards. In arch/arm/plat-meson/Kconfig, there are (commented out) references to customer/meson/dt/Kconfig and customer/drivers/Kconfig. The device tree is not available, but the drivers is, so you could give a try in order to build the touchscreen and sensors drivers available in the customer tarball:

cd ../linux-amlogic-3.10-bringup
tar xvf ../aml_customer-2014-03-06-76ce689191.tar.gz 
mv aml_customer-master customer

Finally, the development tree is ready to build the kernel. There must surely be a script somewhere to do that… I haven’t used the file wifi-fw-2014-03-06-d3b2263640.tar.gz, as the kernel did not complain about it, and it looks like it’s just for Android Kit Kat. There are four scripts to build the kernel: mk_m6.sh, mk_m6tv, mk_m6_tvd.sh, and mk_m8.sh. The first three are for meson6 (dual core processor), and the last one meson8 (quad core S802/M802).

Let’s go with M8 build:

make ARCH=arm meson8_defconfig
./mk_m8.sh

Please not that I had to change mk_m8.sh, as it should just make computer hand requiring a hard reset. The culprity was the line:

make uImage -j

The manpage indicates “If the -j option is given without an argument, make  will  not  limit  the number of jobs that can run simultaneously”.  It does not seem like a good idea… ,s so I changed that to

make uImage -j8

Upon successful build, the end of log you look like:

UIMAGE arch/arm/boot/uImage
Image Name: Linux-3.10.10
Created: Mon Mar 10 11:48:52 2014
Image Type: ARM Linux Kernel Image (lzo compressed)
Data Size: 7099978 Bytes = 6933.57 kB = 6.77 MB
Load Address: 00008000
Entry Point: 00008000
Image arch/arm/boot/uImage is ready
/home/jaufranc/edev/AMLogic/s802/linux-amlogic-3.10-bringup/scripts/amlogic/aml2dtb.sh /home/jaufranc/edev/AMLogic/s802/linux-amlogic-3.10-bringup/arch/arm/boot/dts/amlogic/meson8_skt.dtd
DTD_FILE: /home/jaufranc/edev/AMLogic/s802/linux-amlogic-3.10-bringup/arch/arm/boot/dts/amlogic/meson8_skt.dtd
the middle dts file: /home/jaufranc/edev/AMLogic/s802/linux-amlogic-3.10-bringup/arch/arm/boot/dts/amlogic/meson8_skt.dts
process file /home/jaufranc/edev/AMLogic/s802/linux-amlogic-3.10-bringup/arch/arm/boot/dts/amlogic/meson8_skt.dts start
processing... please wait...
process file /home/jaufranc/edev/AMLogic/s802/linux-amlogic-3.10-bringup/arch/arm/boot/dts/amlogic/meson8_skt.dts end

CC scripts/mod/devicetable-offsets.s
GEN scripts/mod/devicetable-offsets.h
HOSTCC scripts/mod/file2alias.o
HOSTLD scripts/mod/modpost
DTC arch/arm/boot/dts/amlogic/meson8_skt.dtb
rm /home/jaufranc/edev/AMLogic/s802/linux-amlogic-3.10-bringup/arch/arm/boot/dts/amlogic/meson8_skt.dts
-rw-r–r– 1 jaufranc jaufranc 11244948 Mar 10 11:48 ./m8boot.img
m8boot.img done

If you want to get U-boot code it’s not quite as messy, you jut need to download and extract two files:

wget http://openlinux.amlogic.com:8000/download/ARM/u-boot/uboot-2014-03-06-323515c056.tar.gz
wget http://openlinux.amlogic.com:8000/download/ARM/u-boot/aml_uboot_customer-2014-03-06-09887e87b4.tar.gz
tar xvf uboot-2014-03-06-323515c056.tar.gz
cd uboot-next
tar xvf ../aml_uboot_customer-2014-03-06-09887e87b4.tar.gz
mv aml_uboot_customer-next/ customer

Then just select a board in customer/board/ to build U-boot for your hardware. For example:

make m8_k03_M102_v1_config CROSS_COMPILE=arm-linux-gnueabihf-
make CROSS_COMPILE=arm-linux-gnueabihf- -j8

The build failed for me, but it might be I may need to use another compiler, e.g. arm-none-eabi-gcc.

[Update: arm-none-eabi-gcc does seem to go further, but you'll also need an arc compiler as shown in my previous Amlogic U-boot build instructions].

Thanks to M][sko for the tip.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter

Linux Kernel Upstreaming How-To – Linaro Connect Asia 2014

March 4th, 2014 1 comment

I’ve already written a post about submitting kernel patches to mainline based on a 2011 presentation by Greg Kroah-Hartman, but Matt Porter, Broadcom Landing Team (LT) Technical Lead at Linaro, has given two updated talks entitled “Upstreaming 101″ and “Upstreaming 201″ at Linaro Connect Asia 2014. There are many planned talked during LCA 2014, and you can get the list as well as links to presentation and videos, as they become available on LCA 14 resources page.

Upstream Code Flow

Upstream Code Flow

The first session “Upstream 101″ starts with some definitions such as “upstreaming” (basically getting your code to  kernel.org), “mainline”, etc, explains how to get information about the (912) maintainers (tip: it’s in the MAINTAINERS file), how to deal with the 2-week merge windows occurring every 10 weeks or so, but the bulk of the talk detailing the work flow required to upstream code to the Linux kernel.

There are basically 5 steps:

  1. Preparation – Read the kernel documentation, check what others are going.
  2. Creation – Follow the docs, ask questions, run checkpatch.pl, etc…
  3. Posting – Post to code the the relevant mailing list via git
  4. Feedback – You’ll most probably get feedback, asking for clarification or changes to your patch. Answer promptly.
  5. Maintenance – Once you patch is accepted you’ll have to responsibility to maintain the code.

You can download the presentation slides.

The next session “Upstream 201″ is described as “advanced course on kernel upstreaming fundamentals”, but Matt Porter spends time showing example how commit messages, mailing discussion DO and DON’T, as well as example upstreaming a new SoC (AllWinner A1X), and a new driver (Watchdog for bcm281xxx).


The presentation slide are also available for download.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter