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"

(Build Linux Mainline)
 
(9 intermediate revisions by 3 users not shown)
Line 1: Line 1:
= Status =
+
{{rock_header}}
== Kernel 3.17 ==
+
{{Languages | rock/Linux_Mainline}}
  
 +
= Linux Kernel 3.18-rc5 =
  
 +
== Status ==
  
= Build Linux Mainline =
+
What currently works in Linux mainline:
 +
* UART
 +
* SPI
 +
* I2C
 +
* GPIOs / LEDs / IR
 +
* PWM
 +
* USB
 +
* SD/MMC
 +
* Ethernet
 +
* Wifi
 +
* BT
  
'''WARNING: this Linux kernel is intended for developers only. A lot of things are not working yet: I2C, SPI, USB, framebuffer, HDMI driver, SD/MMC, NAND Flash, etc.'''
+
What remains to be done:
 +
* DRM Display driver / LCD controller
 +
* HDMI drivers (ITE66121 / RK616)
 +
* TV OUT drivers (RK1000)
 +
* NAND flash support
  
== Download ==
+
== Requirements ==
  
Get linux-next kernel tree, default config and initramfs.cpio.
+
Ubuntu 14.10 / GCC 4.9+ (GCC 4.8 is not supported)
  
  git clone --depth 1 git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
+
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
 
  cd linux-next
wget http://www.sntech.de/rockchip/rockchip_defconfig -O arch/arm/configs/rockchip_defconfig
 
wget http://www.sntech.de/rockchip/initramfs.cpio
 
  
== Build ==
+
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-
  
export ARCH=arm && export CROSS_COMPILE=arm-linux-gnueabihf-
 
 
  make rockchip_defconfig
 
  make rockchip_defconfig
  make -j8 rk3188-radxarock.dtb
+
  make -j8 zImage dtbs
  make -j8 zImage
+
 
 +
== 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 [https://github.com/linux-rockchip/rkflashtool '''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
  
== Flash boot image ==
+
or download them from here: http://git.kernel.org/cgit/linux/kernel/git/firmware/linux-firmware.git/tree/rtlwifi
  
cat arch/arm/boot/zImage arch/arm/boot/dts/rk3188-radxarock.dtb > kernel.img
+
== BT ==
mkbootimg --kernel kernel.img --ramdisk initramfs.cpio -o boot.img
+
upgrade_tool di -b boot.img
+
upgrade_tool rd
+
  
The device will reboot and you will see the linux kernel booting with GPIO, UART and SMP support.
+
The '''rtl8723au_bt''' driver is not in the mainline kernel yet, but you can build it this way:
  
= Boot log =
+
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=../..
  
In
+
Copy the firmware files and '''rtk_btusb.ko''' into your rootfs:
3 3 DDR3
+
  8723A/rtl8723a_fw -> /lib/firmware/rtl8723a_fw
222MHz
+
  8723B/rtl8723b_fw -> /lib/firmware/rtl8723b_fw
Bus Width=32 Col=10 Bank=8 Row=16 CS=1 Die Bus-Width=8 Size=2048MB
+
Memory OK
+
OUT
+
BUILD=====2
+
No.1 FLASH ID:2c 64 44 4b a9 0
+
OK! 267026
+
unsigned!
+
SecureBootEn = 0 0
+
Boot ver: 2014-03-03#2.13
+
RECOVERY key is pressed
+
UsbBoot 272418
+
UsbHook ...926685
+
powerOn 926711
+
  1198166 UsbConnected
+
  1270413 UsbConnected
+
  1352808 UsbConnected
+
DDR Version 1.04 20140217
+
In
+
SRX
+
DDR3
+
3 222MHz
+
Bus Width=32 Col=10 Bank=8 Row=16 CS=1 Die Bus-Width=8 Size=2048MB
+
OUT
+
BUILD=====3
+
No.1 FLASH ID:2c 64 44 4b a9 0
+
No.2 FLASH ID:7f ff ff ff ff ff
+
OK! 273294
+
unsigned!
+
SecureBootEn = 0 0
+
Boot ver: 2014-03-03#2.13
+
start_linux=====278869
+
  2046791 Starting kernel...@0x60408000
+
+
Uncompressing Linux... done, booting the kernel.
+
[    0.000000] Booting Linux on physical CPU 0x0
+
[    0.000000] Linux version 3.15.0-rc1-next-20140414 (julien@pandora) (gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu7) ) #2 SMP Mon Apr 14 16:10:50 CEST 2014
+
[    0.000000] CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=10c53c7d
+
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
+
[    0.000000] Machine model: Radxa Rock
+
[    0.000000] bootconsole [earlycon0] enabled
+
[    0.000000] Memory policy: Data cache writealloc
+
[    0.000000] PERCPU: Embedded 7 pages/cpu @ee7c6000 s7680 r8192 d12800 u32768
+
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 522768
+
[    0.000000] Kernel command line: console=ttyS2,115200 earlyprintk init=/init
+
[    0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes)
+
[    0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)
+
[    0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)
+
[    0.000000] Memory: 2074088K/2097152K available (2551K kernel code, 131K rwdata, 740K rodata, 2019K init, 209K bss, 23064K reserved, 1318912K highmem)
+
[    0.000000] Virtual kernel memory layout:
+
[    0.000000]    vector  : 0xffff0000 - 0xffff1000  (  4 kB)
+
[    0.000000]    fixmap  : 0xfff00000 - 0xfffe0000  ( 896 kB)
+
[    0.000000]    vmalloc : 0xf0000000 - 0xff000000  ( 240 MB)
+
[    0.000000]    lowmem  : 0xc0000000 - 0xef800000  ( 760 MB)
+
[    0.000000]    pkmap  : 0xbfe00000 - 0xc0000000  (  2 MB)
+
[    0.000000]    modules : 0xbf000000 - 0xbfe00000  (  14 MB)
+
[    0.000000]      .text : 0xc0008000 - 0xc033eeec  (3292 kB)
+
[    0.000000]      .init : 0xc033f000 - 0xc0537e00  (2020 kB)
+
[    0.000000]      .data : 0xc0538000 - 0xc0558e90  ( 132 kB)
+
[    0.000000]        .bss : 0xc0558e98 - 0xc058d594  ( 210 kB)
+
[    0.000000] Hierarchical RCU implementation.
+
[    0.000000] NR_IRQS:16 nr_irqs:16 16
+
[    0.000021] sched_clock: 64 bits at 150MHz, resolution 6ns, wraps every 1832519401472ns
+
[    0.009620] Console: colour dummy device 80x30
+
[    0.014626] Calibrating delay loop... 1196.85 BogoMIPS (lpj=5984256)
+
[    0.102253] pid_max: default: 32768 minimum: 301
+
[    0.107648] Mount-cache hash table entries: 2048 (order: 1, 8192 bytes)
+
[    0.115059] Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes)
+
[    0.123874] CPU: Testing write buffer coherency: ok
+
[    0.130006] Setting up static identity map for 0x60283ea8 - 0x60283f00
+
[    0.141348] CPU1: Booted secondary processor
+
[    0.180620] CPU2: Booted secondary processor
+
[    0.220659] CPU3: Booted secondary processor
+
[    0.259308] Brought up 4 CPUs
+
[    0.277018] SMP: Total of 4 processors activated.
+
[    0.282303] CPU: All CPU(s) started in SVC mode.
+
[    0.288319] devtmpfs: initialized
+
[    0.297250] VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4
+
[    0.306337] pinctrl core: initialized pinctrl subsystem
+
[    0.312800] regulator-dummy: no parameters
+
[    0.320519] NET: Registered protocol family 16
+
[    0.326502] DMA: preallocated 256 KiB pool for atomic coherent allocations
+
[    0.334756] cpuidle: using governor ladder
+
[    0.339400] cpuidle: using governor menu
+
[    0.343959] L310 cache controller enabled
+
[    0.348460] l2x0: 16 ways, CACHE_ID 0x4100c0c8, AUX_CTRL 0x76050001, Cache size: 512 kB
+
[    0.360943] hw-breakpoint: found 5 (+1 reserved) breakpoint and 1 watchpoint registers.
+
[    0.369844] hw-breakpoint: maximum watchpoint size is 4 bytes.
+
[    0.380991] SCSI subsystem initialized
+
[    0.386198] Switched to clocksource arm_global_timer
+
[    0.403056] NET: Registered protocol family 2
+
[    0.408724] TCP established hash table entries: 8192 (order: 3, 32768 bytes)
+
[    0.416680] TCP bind hash table entries: 8192 (order: 4, 65536 bytes)
+
[    0.424023] TCP: Hash tables configured (established 8192 bind 8192)
+
[    0.431211] TCP: reno registered
+
[    0.434859] UDP hash table entries: 512 (order: 2, 16384 bytes)
+
[    0.441509] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
+
[    0.448859] NET: Registered protocol family 1
+
[    0.583624] futex hash table entries: 1024 (order: 4, 65536 bytes)
+
[    0.591714] bounce pool size: 64 pages
+
[    0.596430] msgmni has been set to 1474
+
[    0.601430] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253)
+
[    0.609689] io scheduler noop registered
+
[    0.614088] io scheduler deadline registered (default)
+
[    0.620105] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
+
[    0.628965] 10124000.serial: ttyS0 at MMIO 0x10124000 (irq = 66, base_baud = 1500000) is a 16550A
+
[    0.661593] dw-apb-uart 10126000.serial: Couldn't set LCR to 0
+
[    0.670018] dw-apb-uart 10126000.serial: Couldn't set LCR to 0
+
[    0.676568] 10126000.serial: ttyS1 at MMIO 0x10126000 (irq = 67, base_baud = 1500000) is a 16550A
+
[    0.687132] console [ttyS2] disabled
+
[    0.711313] 20064000.serial: ttyS2 at MMIO 0x20064000 (irq = 68, base_baud = 1500000) is a 16550A
+
[    0.721192] console [ttyS2] enabled
+
[    0.721192] console [ttyS2] enabled
+
[    0.728603] bootconsole [earlycon0] disabled
+
[    0.728603] bootconsole [earlycon0] disabled
+
[    0.761298] dw-apb-uart 20068000.serial: Couldn't set LCR to 0
+
[    0.770043] dw-apb-uart 20068000.serial: Couldn't set LCR to 0
+
[    0.775903] 20068000.serial: ttyS3 at MMIO 0x20068000 (irq = 69, base_baud = 1500000) is a 16550A
+
  [    0.785905] brd: module loaded
+
[    0.789367] mousedev: PS/2 mouse device common for all mice
+
[    0.795010] Synopsys Designware Multimedia Card Interface Driver
+
[    0.801361] TCP: cubic registered
+
[    0.804699] NET: Registered protocol family 17
+
[    0.810545] input: gpio-keys.1 as /devices/soc.0/gpio-keys.1/input/input0
+
  [    0.826727] Freeing unused kernel memory: 2016K (c033f000 - c0537000)
+
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
+
+
processor : 1
+
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
+
+
processor : 2
+
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
+
+
processor : 3
+
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
+
/ #
+
/ # ps
+
PID  USER    COMMAND
+
    1 0        {init} /bin/sh /init
+
    2 0        [kthreadd]
+
    3 0        [ksoftirqd/0]
+
    4 0        [kworker/0:0]
+
    5 0        [kworker/0:0H]
+
    6 0        [kworker/u8:0]
+
    7 0        [rcu_sched]
+
    8 0        [rcu_bh]
+
    9 0        [migration/0]
+
    10 0        [migration/1]
+
    11 0        [ksoftirqd/1]
+
    12 0        [kworker/1:0]
+
    13 0        [kworker/1:0H]
+
    14 0        [migration/2]
+
    15 0        [ksoftirqd/2]
+
    16 0        [kworker/2:0]
+
    17 0        [kworker/2:0H]
+
    18 0        [migration/3]
+
    19 0        [ksoftirqd/3]
+
    20 0        [kworker/3:0]
+
    21 0        [kworker/3:0H]
+
    22 0        [khelper]
+
    23 0        [kdevtmpfs]
+
    24 0        [netns]
+
    25 0        [writeback]
+
    26 0        [bioset]
+
    27 0        [kblockd]
+
    28 0        [kworker/0:1]
+
    29 0        [kswapd0]
+
    30 0        [fsnotify_mark]
+
    31 0        [kworker/u8:1]
+
    34 0        [kworker/1:1]
+
    35 0        [deferwq]
+
    38 0        [kworker/2:1]
+
    57 0        /bin/sh
+
    58 0        [kworker/3:1]
+
    59 0        {busybox} ps
+
/ # cat /proc/interrupts
+
            CPU0      CPU1      CPU2      CPU3     
+
  27:          0          0          0          0      GIC  27  gt
+
  29:      36951      36928      36931      36927      GIC  29  twd
+
  68:        205          0          0          0      GIC  68  serial
+
160:          0          0          0          0  rockchip_gpio_irq  4  GPIO Key Power
+
IPI0:          0          0          0          0  CPU wakeup interrupts
+
IPI1:          0          0          0          0  Timer broadcast interrupts
+
IPI2:        99        116        30        22  Rescheduling interrupts
+
IPI3:          1        53        54        54  Function call interrupts
+
IPI4:          0          0          0          0  Single function call interrupts
+
IPI5:          0          0          0          0  CPU stop interrupts
+
IPI6:        10          5          6          0  IRQ work interrupts
+
IPI7:          0          0          0          0  completion interrupts
+
Err:          0
+
/ #
+

Latest revision as of 03:13, 29 September 2022

Linux Kernel 3.18-rc5

Status

What currently works in Linux mainline:

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

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

BT

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