Please enable javascript, or click here to visit my ecommerce web site powered by Shopify.
Jump to: navigation, search

Difference between revisions of "Rock/Linux Mainline"

(Instructions to build Linux Mainline (version 3.13.1))
 
(Linux Kernel 3.18-rc5)
(12 intermediate revisions by 2 users not shown)
Line 1: Line 1:
= Build Linux Mainline =
+
{{rock_header}}
 +
{{Languages | rock/Linux_Mainline}}
  
== Download ==
+
= Linux Kernel 3.18-rc5 =
  
Get latest Linux stable version, default config and initramfs.cpio.
+
== Status ==
  
    wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.13.1.tar.xz
+
What currently works in Linux mainline:
    tar xJf linux-3.13.1.tar.xz
+
* UART
    cd linux-3.13.1
+
* SPI
    wget http://www.sntech.de/rockchip/rockchip_defconfig -O arch/arm/configs/rockchip_defconfig
+
* I2C
    wget http://www.sntech.de/rockchip/initramfs.cpio
+
* GPIOs / LEDs / IR
 +
* PWM
 +
* USB
 +
* SD/MMC
 +
* Ethernet
 +
* Wifi
 +
* Bluetooth
  
== Build ==
+
What remains to be done:
 +
* DRM Display driver / LCD controller
 +
* HDMI drivers (ITE66121 / RK616)
 +
* TV OUT drivers (RK1000)
 +
* NAND flash support
  
    export ARCH=arm && export CROSS_COMPILE=arm-linux-gnueabihf-
+
== Requirements ==
    make rockchip_defconfig
+
    make -j8 rk3188-radxarock.dtb
+
    make -j8 zImage
+
    cat arch/arm/boot/zImage arch/arm/boot/dts/rk3188-radxarock.dtb > kernel.img
+
  
== Flash boot image ==
+
Ubuntu 14.10 / GCC 4.9+ (GCC 4.8 is not supported)
  
    mkbootimg --kernel kernel.img --ramdisk initramfs.cpio -o boot.img
+
sudo apt-get install git build-essential gcc-arm-linux-gnueabihf lzop libncurses5-dev libssl-dev bc
    upgrade_tool di -b boot.img
+
    upgrade_tool rd
+
  
 +
== Get the source code ==
  
= Boot log =
+
Get '''linux-next''' kernel tree (stable branch), default config and updated device-tree.
  
    DDR Version 1.04 20130517
+
git clone -b stable --depth 1 git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
    In
+
cd linux-next
    SRX
+
 
    DDR3
+
wget http://rockchip.fr/radxa/linux/rockchip_defconfig -O arch/arm/configs/rockchip_defconfig
    3 222MHz
+
wget http://rockchip.fr/radxa/linux/rk3188-radxarock.dts -O arch/arm/boot/dts/rk3188-radxarock.dts
    Bus Width=32 Col=10 Bank=8 Row=16 CS=1 Die Bus-Width=8 Size=2048MB
+
 
    OUT
+
== Build kernel ==
    BUILD=====3
+
 
    SdmmcInit=0 20
+
We have to build two files:
    No.1 FLASH ID:2c 64 44 4b a9 0
+
* '''zImage''' (the kernel)
    No.2 FLASH ID:f ff ff ff ff ff
+
* '''rk3188-radxarock.dtb''' (the device tree blob)
    No.3 FLASH ID:1f ff ff ff ff ff
+
 
    No.4 FLASH ID:f ff ff ff ff ff
+
 
    gpReadRetrial pageadd=3f0402 eccbit=28 errorbit=ffffffff
+
  export ARCH=arm
    FlashReadPage pageadd=3f0402 pageadd1=3b37f7ff  eccbit=28 errorbit=ffffffff
+
  export CROSS_COMPILE=arm-linux-gnueabihf-
    spare: 0x0:a5760f36 aab7ffb1 aab7ffb4 aab7ffb0
+
 
    gpReadRetrial pageadd=3f0403 eccbit=28 errorbit=ffffffff
+
  make rockchip_defconfig
    FlashReadPage pageadd=3f0403 pageadd1=3b37f7ff  eccbit=28 errorbit=ffffffff
+
  make -j8 zImage dtbs
    spare: 0x0:d1fb3418 de3ac49f de3ac49e de3ac49e
+
 
    OK! 362185
+
== Create boot image ==
    unsigned!
+
 
     SecureBootEn = 0 0
+
Install mkbootimg if you don't have it on your system.
    Boot ver: 2013-12-27#2.10
+
 
     start_linux=====367703
+
     git clone https://github.com/neo-technologies/rockchip-mkbootimg.git
    2023429 Starting kernel...@0x60408000
+
     cd rockchip-mkbootimg
      
+
    make
     Uncompressing Linux... done, booting the kernel.
+
     sudo make install
    Booting Linux on physical CPU 0x0
+
     cd ..
    Linux version 3.13.1 (julien@julien-ubuntu) (gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu7) ) #4 SMP Mon Feb 3 17:43:45 CET 2014
+
 
    CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=10c53c7d
+
We need to append the device tree blob to zImage (CONFIG_ARM_APPENDED_DTB option) until we can use U-Boot device tree support.
    CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
+
 
     Machine model: Radxa Rock
+
cat arch/arm/boot/zImage arch/arm/boot/dts/rk3188-radxarock.dtb > zImage-dtb
    bootconsole [earlycon0] enabled
+
 
    Memory policy: Data cache writealloc
+
==get ramdisk==
    PERCPU: Embedded 7 pages/cpu @c18dd000 s7616 r8192 d12864 u32768
+
 
    Built 1 zonelists in Zone order, mobility grouping on. Total pages: 522768
+
     git clone https://github.com/radxa/initrd.git
    Kernel command line: console=ttyS2,115200 earlyprintk init=/init
+
     find . ! -path "./.git*" | cpio -H newc -ov > initrd.img
     PID hash table entries: 4096 (order: 2, 16384 bytes)
+
 
    Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
+
Create the '''boot.img''' using mkbootimg (Rockchip version).
    Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
+
 
    Memory: 2074164K/2097152K available (2491K kernel code, 128K rwdata, 728K rodata, 2011K init, 207K bss, 22988K reserved, 1318912K highmem)
+
  mkbootimg --kernel zImage-dtb --ramdisk initrd.img -o boot.img
    Virtual kernel memory layout:
+
 
        vector : 0xffff0000 - 0xffff1000  (  4 kB)
+
== Flash parameter and boot image ==
        fixmap : 0xfff00000 - 0xfffe0000  ( 896 kB)
+
 
        vmalloc : 0xf0000000 - 0xff000000  ( 240 MB)
+
Get a parameter file from http://dl.radxa.com/rock/images/parameter
        lowmem : 0xc0000000 - 0xef800000  ( 760 MB)
+
 
        pkmap  : 0xbfe00000 - 0xc0000000  (  2 MB)
+
wget http://dl.radxa.com/rock/images/parameter/parameter_linux_sd
        modules : 0xbf000000 - 0xbfe00000  (  14 MB)
+
 
          .text : 0xc0008000 - 0xc032cf0c  (3220 kB)
+
Flash parameter and boot.img using [https://github.com/linux-rockchip/rkflashtool '''rkflashtool''']
          .init : 0xc032d000 - 0xc0523dc0  (2012 kB)
+
 
          .data : 0xc0524000 - 0xc0544288  ( 129 kB)
+
rkflashtool P < parameter_linux_sd
          .bss : 0xc0544290 - 0xc0578018  ( 208 kB)
+
rkflashtool w boot < boot.img
    Hierarchical RCU implementation.
+
rkflashtool b
    NR_IRQS:16 nr_irqs:16 16
+
 
    sched_clock: 32 bits at 150MHz, resolution 6ns, wraps every 28633115641ns
+
= Notes =
    Console: colour dummy device 80x30
+
 
    Calibrating delay loop... 1196.85 BogoMIPS (lpj=5984256)
+
== Install Rootfs in first partition of SD card ==
    pid_max: default: 32768 minimum: 301
+
 
    Mount-cache hash table entries: 512
+
Your rootfs should be in ext4 format. It will be loaded from '''/dev/mmcblk0p1''' by default.
    CPU: Testing write buffer coherency: ok
+
 
    Setting up static identity map for 0x60274c88 - 0x60274ce0
+
== Wireless ==
    CPU1: failed to boot: -38
+
 
    CPU2: failed to boot: -38
+
The Realtek wifi chipsets require firmwares to be installed in '''/lib/firmware/rtlwifi'''
    CPU3: failed to boot: -38
+
 
    Brought up 1 CPUs
+
You can get them by installing the '''linux-firmware''' package from your Linux distribution
    SMP: Total of 1 processors activated.
+
sudo apt-get install linux-firmware
    CPU: All CPU(s) started in SVC mode.
+
 
    devtmpfs: initialized
+
or download them from here: http://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git/tree/rtlwifi
    VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
+
 
    pinctrl core: initialized pinctrl subsystem
+
== Bluetooth ==
    regulator-dummy: no parameters
+
 
    NET: Registered protocol family 16
+
The '''rtl8723au_bt''' driver is not in the mainline kernel yet, but you can build it this way:
    DMA: preallocated 256 KiB pool for atomic coherent allocations
+
 
    cpuidle: using governor ladder
+
git clone -b new https://github.com/lwfinger/rtl8723au_bt.git
    cpuidle: using governor menu
+
  cd rtl8723au_bt/Linux_BT_USB_2.11.20140423_8723BE/
    L310 cache controller enabled
+
wget http://rockchip.fr/radxa/linux/patches/rtl8723au_bt/0001-Add-hci_recv_fragment-function.patch
    l2x0: 16 ways, CACHE_ID 0x4100c0c8, AUX_CTRL 0x76050001, Cache size: 512 kB
+
git am 0001-Add-hci_recv_fragment-function.patch
    hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
+
make KDIR=../..
    hw-breakpoint: maximum watchpoint size is 4 bytes.
+
 
    bio: create slab <bio-0> at 0
+
Copy the firmware files and '''rtk_btusb.ko''' into your rootfs:
    SCSI subsystem initialized
+
8723A/rtl8723a_fw -> /lib/firmware/rtl8723a_fw
    Switched to clocksource arm_global_timer
+
8723B/rtl8723b_fw -> /lib/firmware/rtl8723b_fw
    NET: Registered protocol family 2
+
    TCP established hash table entries: 8192 (order: 3, 32768 bytes)
+
    TCP bind hash table entries: 8192 (order: 4, 65536 bytes)
+
    TCP: Hash tables configured (established 8192 bind 8192)
+
    TCP: reno registered
+
    UDP hash table entries: 512 (order: 2, 16384 bytes)
+
    UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
+
    NET: Registered protocol family 1
+
    bounce pool size: 64 pages
+
    msgmni has been set to 1475
+
    Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253)
+
    io scheduler noop registered
+
    io scheduler deadline registered (default)
+
    Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
+
    10124000.serial: ttyS0 at MMIO 0x10124000 (irq = 66, base_baud = 1500000) is a 16550A
+
    dw-apb-uart 10126000.serial: Couldn't set LCR to 0
+
    dw-apb-uart 10126000.serial: Couldn't set LCR to 0
+
    10126000.serial: ttyS1 at MMIO 0x10126000 (irq = 67, base_baud = 1500000) is a 16550A
+
    20064000.serial: ttyS2 at MMIO 0x20064000 (irq = 68, base_baud = 1500000) is a 16550A
+
    console [ttyS2] enabled
+
    console [ttyS2] enabled
+
    bootconsole [earlycon0] disabled
+
    bootconsole [earlycon0] disabled
+
    dw-apb-uart 20068000.serial: Couldn't set LCR to 0
+
    dw-apb-uart 20068000.serial: Couldn't set LCR to 0
+
    20068000.serial: ttyS3 at MMIO 0x20068000 (irq = 69, base_baud = 1500000) is a 16550A
+
    brd: module loaded
+
    mousedev: PS/2 mouse device common for all mice
+
    Synopsys Designware Multimedia Card Interface Driver
+
    TCP: cubic registered
+
    NET: Registered protocol family 17
+
    input: gpio-keys.1 as /devices/soc.0/gpio-keys.1/input/input0
+
    Freeing unused kernel memory: 2008K (c032d000 - c0523000)
+
    mount: mounting /dev/mmcblk0p1 on /mnt failed: No such device or address
+
    total 0
+
    drwxr-xr-x    2 1000    1000            40 May 30  2013 .
+
    drwxr-xr-x  13 1000    1000          280 Jun 9  2013 ..
+
    umount: can't umount /mnt: Invalid argument
+
    processor : 0
+
    model name : ARMv7 Processor rev 0 (v7l)
+
    Features : swp half thumb fastmult vfp edsp neon vfpv3 tls vfpd32
+
    CPU implementer : 0x41
+
    CPU architecture: 7
+
    CPU variant : 0x3
+
    CPU part : 0xc09
+
    CPU revision : 0
+
   
+
    Hardware : Rockchip Cortex-A9 (Device Tree)
+
    Revision : 0000
+
    Serial : 0000000000000000
+
   
+
   
+
    BusyBox v1.20.2 (Debian 1:1.20.0-8) built-in shell (ash)
+
    Enter 'help' for a list of built-in commands.
+
   
+
    /bin/sh: can't access tty; job control turned off
+
    / #
+

Revision as of 09:22, 17 July 2015

Linux Kernel 3.18-rc5

Status

What currently works in Linux mainline:

  • UART
  • SPI
  • I2C
  • GPIOs / LEDs / IR
  • PWM
  • USB
  • SD/MMC
  • Ethernet
  • Wifi
  • Bluetooth

What remains to be done:

  • DRM Display driver / LCD controller
  • HDMI drivers (ITE66121 / RK616)
  • TV OUT drivers (RK1000)
  • NAND flash support

Requirements

Ubuntu 14.10 / GCC 4.9+ (GCC 4.8 is not supported)

sudo apt-get install git build-essential gcc-arm-linux-gnueabihf lzop libncurses5-dev libssl-dev bc

Get the source code

Get linux-next kernel tree (stable branch), default config and updated device-tree.

git clone -b stable --depth 1 git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
cd linux-next
wget http://rockchip.fr/radxa/linux/rockchip_defconfig -O arch/arm/configs/rockchip_defconfig
wget http://rockchip.fr/radxa/linux/rk3188-radxarock.dts -O arch/arm/boot/dts/rk3188-radxarock.dts

Build kernel

We have to build two files:

  • zImage (the kernel)
  • rk3188-radxarock.dtb (the device tree blob)


export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
make rockchip_defconfig
make -j8 zImage dtbs

Create boot image

Install mkbootimg if you don't have it on your system.

   git clone https://github.com/neo-technologies/rockchip-mkbootimg.git
   cd rockchip-mkbootimg
   make
   sudo make install
   cd ..

We need to append the device tree blob to zImage (CONFIG_ARM_APPENDED_DTB option) until we can use U-Boot device tree support.

cat arch/arm/boot/zImage arch/arm/boot/dts/rk3188-radxarock.dtb > zImage-dtb

get ramdisk

   git clone https://github.com/radxa/initrd.git
   find . ! -path "./.git*"  | cpio -H newc  -ov > initrd.img

Create the boot.img using mkbootimg (Rockchip version).

mkbootimg --kernel zImage-dtb --ramdisk initrd.img -o boot.img

Flash parameter and boot image

Get a parameter file from http://dl.radxa.com/rock/images/parameter

wget http://dl.radxa.com/rock/images/parameter/parameter_linux_sd

Flash parameter and boot.img using rkflashtool

rkflashtool P < parameter_linux_sd
rkflashtool w boot < boot.img
rkflashtool b

Notes

Install Rootfs in first partition of SD card

Your rootfs should be in ext4 format. It will be loaded from /dev/mmcblk0p1 by default.

Wireless

The Realtek wifi chipsets require firmwares to be installed in /lib/firmware/rtlwifi

You can get them by installing the linux-firmware package from your Linux distribution

sudo apt-get install linux-firmware

or download them from here: http://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git/tree/rtlwifi

Bluetooth

The rtl8723au_bt driver is not in the mainline kernel yet, but you can build it this way:

git clone -b new https://github.com/lwfinger/rtl8723au_bt.git
cd rtl8723au_bt/Linux_BT_USB_2.11.20140423_8723BE/
wget http://rockchip.fr/radxa/linux/patches/rtl8723au_bt/0001-Add-hci_recv_fragment-function.patch
git am 0001-Add-hci_recv_fragment-function.patch
make KDIR=../..

Copy the firmware files and rtk_btusb.ko into your rootfs:

8723A/rtl8723a_fw -> /lib/firmware/rtl8723a_fw
8723B/rtl8723b_fw -> /lib/firmware/rtl8723b_fw