1. 程式人生 > >在JZ2440上移植裝置樹---下:核心和裝置樹移植

在JZ2440上移植裝置樹---下:核心和裝置樹移植

在JZ2440上移植裝置樹—下:核心和裝置樹移植

2、核心移植

在www.kernel.org上下載原始碼,我這裡選取的是linux-4.15.10版本。
解壓後,檔名重新命名為linux-4.15.10-jz2440。 cd進入
既然要使用裝置樹,我們先看核心中是否已有支援2440的裝置樹檔案。
cd arch/arm/boot/dts
ls
發現並沒有支援2440的裝置數,最接近的只有2416的裝置數;
find -name “*defconfig” 發現在
arch/arm/configs 下有
mini2440_defconfig和s3c2410_defconfig兩個接近的配置檔案。

2.1 核心編譯

2.1.1 新增裝置樹檔案

我的思路是核心配置檔案選取s3c2410_defconfig,
裝置樹複製s3c2416.dtsi為s3c2440.dtsi
複製s3c2416-pinctrl.dtsi為s3c2440-pinctrl.dtsi
複製s3c2416-smdk2416.dts為s3c2440-jz2440.dts
後面遇到問題,具體分析和修改。
介紹一下上面的幾個裝置樹檔案:

skeleton.dtsi 存放的是一個裝置樹必備的一些基本屬性
s3c24xx.dtsi 中存放的是整個s3c24xx系列SoC公共的一些屬性,如中斷控制器、串列埠、看門狗、RTC、I2C控制器等等
s3c2440-pinctrl.dtsi 存放的是s3c2440這款SoC中GPIO控制器、外部中斷控制器、引腳複用等資訊的配置
s3c2440.dtsi 存放的是s3c2440這個SoC跟其他s3c24xx系列不同的一些硬體資訊,如clock控制器、串列埠等等
s3c2440-jz2440.dts 存放的是jz2440的硬體資訊
裝置樹這樣一層層包含的好處是: 在同名節點中,後出現的屬性會覆蓋前面出現的同名屬性,不同的屬性將來會合併到所隸屬的同名的節點下面。

先修改裝置樹的Makefile
vim arch/arm/boot/dts/Makefile
這裡寫圖片描述
這樣make dtbs的時候就會編譯s3c2440-jz2440.dtb

2.1.2 新增jz2440的板子資訊

修改Makefile和Kconfig,並新增jz2440的板子資訊,使核心在啟動時能從裝置樹檔案中解析到的資訊匹配到jz2440板子

2.1.2.1 修改arch/arm/mach-s3c24xx/Kconfig

新增如下資訊:
這裡寫圖片描述
這樣的話,在make menuconfig的時候,選擇這個這個配置。選擇了這個配置,CONFIG_CLKSRC_OF/CONFIG_USE_OF/CONFIG_PINCTRL/CONFIG_S3C24XX都會被配置上。

2.1.2.1 修改arch/arm/mach-s3c24xx/Makefile

這裡寫圖片描述
在menuconfig上選擇了MACH_JZ2440後, 在make uImage的時候會定義CONFIG_MACH_JZ2440巨集,這樣就會編譯mach-jz2440-dt.c

2.1.2.1 新增arch/arm/mach-s3c24xx/mach-jz2440-dt.c檔案
#include <linux/clocksource.h>
#include <linux/irqchip.h>
#include <linux/serial_s3c.h>
#include <asm/mach/arch.h>
#include <mach/map.h>
#include <plat/cpu.h>
#include <plat/pm.h>
#include "common.h"

static void __init jz2440_dt_map_io(void)
{
    s3c24xx_init_io(NULL, 0);
}

static void __init jz2440_dt_machine_init(void)
{
    s3c_pm_init();
}

static const char *const jz2440_dt_compat[] __initconst = {
    "samsung,s3c2440",
    "samsung,jz2440",
    NULL
};

DT_MACHINE_START(S3C2440_DT, "Samsung S3C2440 (Flattened Device Tree)")
    .dt_compat    = jz2440_dt_compat,
    .map_io        = jz2440_dt_map_io,
    .init_irq    = irqchip_init,
    .init_machine    = jz2440_dt_machine_init,
MACHINE_END

如果核心配置make menuconfig中選擇支援裝置樹

make menuconfig ---> 
              Boot options ---> 
                       Flattened Device Tree support

那麼核心在啟動時,不會通過u-boot傳入的machid來找到單板檔案;而是通過上面的dt_compat陣列中的資訊和裝置樹中的compatible進行匹配,以此來找到相應單板檔案。裝置樹中的相關設定如下圖:
這裡寫圖片描述

2.1.3 核心配置make menuconfig

在執行make menuconfig之前先要確定預設的配置檔案。前面已有描述,選取s3c2410_defconfig作為預設配置檔案,在核心程式碼主目錄下先執行
make ARCH=arm exynos_defconfi
再執行
make ARCH=arm menuconfig 進入配置選單
ps:前面講過 配置核心支援裝置樹,配置核心支援JZ2440單板檔案,這裡不再重複。

2.1.3.1 配置開啟核心除錯

在啟動kernel的時候最煩人的是,uboot打印出”Starting kernel …”後,整個系統就沒有任何動靜了,此時,就需要開啟核心早期的除錯log,方法如下:
為了能夠儘量看到更多核心啟動早期的log,一定要在內核配置檔案中把核心早期的log配置開啟:

Kernel hacking  --->
    [*] Kernel low-level debugging functions (read help!)
        Kernel low-level debugging port (Use Samsung S3C UART 0 for low-level debug)  --->
    [*] Early printk

除了上面的配置,還必須在bootargs中新增一個earlyprintk字串,否則這些log還是打印不出來,此外,建議再在bootargs中新增一個ignore_loglevel引數,防止有些模組的log由於loglevel的問題無法輸出log
具體的bootargs引數會在後面給出。

2.1.3.2 配置核心支援DM9000網絡卡

已經確定JZ2440上有DM90000,我們在核心配置時,先把相應配置選上。

make ARCH=arm menuconfig
[*] Networking support  --->
    Networking options  --->
        <*> Packet socket
        <*>Unix domain sockets 
        [*] TCP/IP networking
        [*]   IP: kernel level autoconfiguration
Device Drivers  --->
    [*] Network device support  --->
        [*]   Ethernet driver support (NEW)  --->
            <*>   DM9000 support
2.1.3.3 配置核心支援根檔案系統型別

如果核心還沒有移植好網絡卡和儲存裝置驅動,可以先嚐試通過記憶體虛擬檔案系統ramdisk先把核心調通,再去支援其他的檔案系統型別。關於 ramdisk 的使用可以參考https://blog.csdn.net/u014213012/article/details/51582826
我在這裡嘗試使用nfs網路檔案系統,相應核心配置如下:

File systems  --->
    [*] Network File Systems (NEW)  --->
        <*>   NFS client support
        [*]     NFS client support for NFS version 3
        [*]       NFS client support for the NFSv3 ACL protocol extension
        [*]   Root file system on NFS

bootargs啟動引數設定如下:

bootargs=noinitrd root=/dev/nfs nfsroot=192.168.8.3:/nfs/rootfs rw
clk_ignore_unused console=ttySAC0,115200 init=/linuxrc
ip=192.168.8.4:192.168.8.3:192.168.8.1:255.255.255.0::eth0:off
ignore_loglevel earlyprintk

這裡我們通過bootargs告知核心根檔案系統為nfs網路檔案系統,並詳細的設定了ip,伺服器ip,閘道器等網路引數資訊,方便核心啟動時直接通過這些引數去掛載nfs網路檔案系統。這裡我們直接採用韋老師製作好的檔案系統—fs_mini_mdev_new.tar.bz2
將其解壓到linux主機/nfs/rootfs目錄下。
ps:
關於根檔案系統的製作可以參考韋老師視訊、華清相關課程和網路相關資料
關於uboot的環境變數及bootargs設定請參考:
https://blog.csdn.net/dzw19911024/article/details/52334254

2.1.4 核心編譯

配置好核心.config檔案後,在核心主目錄下

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

編譯生成zImage。其中的gcc版本為gcc-4.6.4,其安裝和新增PATH方法不再贅述。

make dtbs ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

編譯裝置樹檔案,把前面配置過的arch/arm/boot/dts裡的dts檔案編譯成dtb檔案。
cd arch/arm/boot 進入zImage目錄,使用mkimage 工具將zImage製作成uImage

mkimage -A arm -O linux -T kernel -C none -a 0x31000000 -e 0x31000040 -n "jz2440" -d zImage uImage

我們先將生成的uImage檔案和s3c2440-jz2440.dtb檔案放入/tftpboot目錄,使用tftp服務,在uboot啟動時使用tftp服務將核心和裝置樹從tftp伺服器中載入到記憶體,然後bootm。具體的bootcmd引數如下:

bootcmd=tftp 31000000 uImage; tftp 32000000 s3c2440-jz2440.dtb; bootm 31000000 - 32000000

先不管根檔案系統和bootargs,直接啟動板子,看核心啟動執行情況。
結果發現,核心和裝置樹載入到記憶體後,核心無法正常執行;後續就是裝置樹的修改工作了;
ps:mkimage 的使用方法參考
https://blog.csdn.net/qq_29350001/article/details/51490415

2.2 修改裝置樹

因為前面配置了earlyprintk,串列埠正常情況下一定會有輸出,這樣我們就可以根據輸出的資訊,分析和查詢原因,對症下藥進行修改調整,並最終成功掛接到根檔案系統,完成移植。

2.2.1 修改裝置樹compatible

前面提到過修改s3c2440-jz2440.dts裝置樹的compatible,同時也要修改s3c2440.dtsi中的compatible,這裡不再重複。

2.2.2 修改串列埠部分

首先,我們發現串列埠到最後輸出亂碼:
這裡寫圖片描述
根據此資訊我們大概猜測為串列埠有兩個問題,1、串列埠初始化較多,可能是多個串列埠之間產生了干擾;2、由於我們複製了2416的裝置樹檔案,其中的資訊還沒改成2440。
開啟s3c2440-jz2440.dts檔案,將串列埠1至串列埠3的裝置樹資訊先遮蔽掉;
這裡寫圖片描述
開啟s3c2440.dtsi檔案,將串列埠屬性改為2440,如下:
這裡寫圖片描述

2.2.3 DM9000裝置樹配置

在s3c2440-jz2440.dts中新增

    srom-cs4@20000000 {
        compatible = "simple-bus";
        #address-cells = <1>;
        #size-cells = <1>;
        reg = <0x20000000 0x8000000>;
        ranges;
        [email protected]18000000 {
            compatible = "davicom,dm9000";
            reg = <0x20000000 0x2 0x20000004 0x2>;
            interrupt-parent = <&gpf>;
            interrupts = <7 4>;
            local-mac-address = [00 00 de ad be ef];
            davicom,no-eeprom;
        };
    };

重新編譯裝置樹,並複製到/tftpboot目錄;重啟開發板,不出意外的話就會正常啟動核心並載入根檔案系統了:

U-Boot 2013.01 (May 15 2018 - 22:43:15)

CPUID: 32440001
FCLK:      400 MHz
HCLK:      100 MHz
PCLK:       50 MHz
DRAM:  64 MiB
WARNING: Caches not enabled
Flash: 2 MiB
NAND:  256 MiB
In:    serial
Out:   serial
Err:   serial
Net:   dm9000
Hit any key to stop autoboot:  0 
ERROR: resetting DM9000 -> not responding
dm9000 i/o: 0x20000000, id: 0x90000a46 
DM9000: running in 16 bit mode
MAC: 08:00:3e:26:0a:5b
could not establish link
Using dm9000 device
TFTP from server 192.168.8.3; our IP address is 192.168.8.4
Filename 'uImage'.
Load address: 0x31000000
Loading: #################################################################
         #################################################################
         #################################################################
         #######################################
         816.4 KiB/s
done
Bytes transferred = 3426600 (344928 hex)
dm9000 i/o: 0x20000000, id: 0x90000a46 
DM9000: running in 16 bit mode
MAC: 08:00:3e:26:0a:5b
could not establish link
Using dm9000 device
TFTP from server 192.168.8.3; our IP address is 192.168.8.4
Filename 's3c2440-jz2440.dtb'.
Load address: 0x32000000
Loading: #
         392.6 KiB/s
done
Bytes transferred = 6038 (1796 hex)
## Booting kernel from Legacy Image at 31000000 ...
   Image Name:   jz2440
   Created:      2018-05-19  14:57:09 UTC
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3426536 Bytes = 3.3 MiB
   Load Address: 31000000
   Entry Point:  31000040
   Verifying Checksum ... OK
## Flattened Device Tree blob at 32000000
   Booting using the fdt blob at 0x32000000
   XIP Kernel Image ... OK
OK
   Loading Device Tree to 33b23000, end 33b27795 ... OK

Starting kernel ...

Booting Linux on physical CPU 0x0
Linux version 4.15.10 ([email protected]) (gcc version 4.6.4 (crosstool-NG hg+default-2685dfa9de14 - tc0002)) #8 Sat May 19 22:55:44 CST 2018
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=0000717f
CPU: VIVT data cache, VIVT instruction cache
OF: fdt: Machine model: JZ2440
Memory policy: Data cache writeback
CPU S3C2440A (id 0x32440001)
DT missing boot CPU MPIDR[23:0], fall back to default cpu_logical_map
random: fast init done
Built 1 zonelists, mobility grouping on.  Total pages: 16256
Kernel command line: noinitrd root=/dev/nfs nfsroot=192.168.8.3:/nfs/rootfs rw clk_ignore_unused console=ttySAC0,115200 init=/linuxrc ip=192.168.8.4:192.168.8.3:192.168.8.1:255.255.255.0::eth0:off
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
Memory: 57940K/65536K available (4885K kernel code, 265K rwdata, 1168K rodata, 224K init, 202K bss, 7596K reserved, 0K cma-reserved)
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
    vmalloc : 0xc4800000 - 0xff800000   ( 944 MB)
    lowmem  : 0xc0000000 - 0xc4000000   (  64 MB)
    modules : 0xbf000000 - 0xc0000000   (  16 MB)
      .text : 0x(ptrval) - 0x(ptrval)   (4887 kB)
      .init : 0x(ptrval) - 0x(ptrval)   ( 224 kB)
      .data : 0x(ptrval) - 0x(ptrval)   ( 266 kB)
       .bss : 0x(ptrval) - 0x(ptrval)   ( 203 kB)
NR_IRQS: 111
irq: clearing pending status 00000002
Division by zero in kernel.
CPU: 0 PID: 0 Comm: swapper Not tainted 4.15.10 #8
Hardware name: Samsung S3C2440 (Flattened Device Tree)
[<c0111014>] (unwind_backtrace) from [<c010dfd4>] (show_stack+0x10/0x14)
[<c010dfd4>] (show_stack) from [<c05b32d0>] (Ldiv0+0x8/0x10)
[<c05b32d0>] (Ldiv0) from [<c0349ec0>] (samsung_pll6552_recalc_rate+0x54/0x64)
[<c0349ec0>] (samsung_pll6552_recalc_rate) from [<c0345b2c>] (clk_register+0x3bc/0x5e0)
[<c0345b2c>] (clk_register) from [<c0345dc8>] (clk_hw_register+0x8/0x14)
[<c0345dc8>] (clk_hw_register) from [<c0732e68>] (samsung_clk_register_pll+0x2e4/0x3bc)
[<c0732e68>] (samsung_clk_register_pll) from [<c0733674>] (s3c2443_common_clk_init+0x90/0x268)
[<c0733674>] (s3c2443_common_clk_init) from [<c07324c8>] (of_clk_init+0x188/0x1fc)
[<c07324c8>] (of_clk_init) from [<c0721f44>] (time_init+0x28/0x34)
[<c0721f44>] (time_init) from [<c071eaa8>] (start_kernel+0x220/0x394)
[<c071eaa8>] (start_kernel) from [<00000000>] (  (null))
Division by zero in kernel.
CPU: 0 PID: 0 Comm: swapper Not tainted 4.15.10 #8
Hardware name: Samsung S3C2440 (Flattened Device Tree)
[<c0111014>] (unwind_backtrace) from [<c010dfd4>] (show_stack+0x10/0x14)
[<c010dfd4>] (show_stack) from [<c05b32d0>] (Ldiv0+0x8/0x10)
[<c05b32d0>] (Ldiv0) from [<c0349e50>] (samsung_pll6553_recalc_rate+0x4c/0x68)
[<c0349e50>] (samsung_pll6553_recalc_rate) from [<c0345b2c>] (clk_register+0x3bc/0x5e0)
[<c0345b2c>] (clk_register) from [<c0345dc8>] (clk_hw_register+0x8/0x14)
[<c0345dc8>] (clk_hw_register) from [<c0732e68>] (samsung_clk_register_pll+0x2e4/0x3bc)
[<c0732e68>] (samsung_clk_register_pll) from [<c0733674>] (s3c2443_common_clk_init+0x90/0x268)
[<c0733674>] (s3c2443_common_clk_init) from [<c07324c8>] (of_clk_init+0x188/0x1fc)
[<c07324c8>] (of_clk_init) from [<c0721f44>] (time_init+0x28/0x34)
[<c0721f44>] (time_init) from [<c071eaa8>] (start_kernel+0x220/0x394)
[<c071eaa8>] (start_kernel) from [<00000000>] (  (null))
Division by zero in kernel.
CPU: 0 PID: 0 Comm: swapper Not tainted 4.15.10 #8
Hardware name: Samsung S3C2440 (Flattened Device Tree)
[<c0111014>] (unwind_backtrace) from [<c010dfd4>] (show_stack+0x10/0x14)
[<c010dfd4>] (show_stack) from [<c05b32d0>] (Ldiv0+0x8/0x10)
[<c05b32d0>] (Ldiv0) from [<c0349e50>] (samsung_pll6553_recalc_rate+0x4c/0x68)
[<c0349e50>] (samsung_pll6553_recalc_rate) from [<c0343db0>] (clk_recalc+0x44/0x58)
[<c0343db0>] (clk_recalc) from [<c0343ee4>] (__clk_recalc_rates+0x24/0x88)
[<c0343ee4>] (__clk_recalc_rates) from [<c0345b90>] (clk_register+0x420/0x5e0)
[<c0345b90>] (clk_register) from [<c0345dc8>] (clk_hw_register+0x8/0x14)
[<c0345dc8>] (clk_hw_register) from [<c0347eac>] (clk_hw_register_mux_table+0xcc/0x1ac)
[<c0347eac>] (clk_hw_register_mux_table) from [<c0347fd8>] (clk_hw_register_mux+0x4c/0x54)
[<c0347fd8>] (clk_hw_register_mux) from [<c073282c>] (samsung_clk_register_mux+0x60/0xac)
[<c073282c>] (samsung_clk_register_mux) from [<c0733684>] (s3c2443_common_clk_init+0xa0/0x268)
[<c0733684>] (s3c2443_common_clk_init) from [<c07324c8>] (of_clk_init+0x188/0x1fc)
[<c07324c8>] (of_clk_init) from [<c0721f44>] (time_init+0x28/0x34)
[<c0721f44>] (time_init) from [<c071eaa8>] (start_kernel+0x220/0x394)
[<c071eaa8>] (start_kernel) from [<00000000>] (  (null))
Division by zero in kernel.
CPU: 0 PID: 0 Comm: swapper Not tainted 4.15.10 #8
Hardware name: Samsung S3C2440 (Flattened Device Tree)
[<c0111014>] (unwind_backtrace) from [<c010dfd4>] (show_stack+0x10/0x14)
[<c010dfd4>] (show_stack) from [<c05b32d0>] (Ldiv0+0x8/0x10)
[<c05b32d0>] (Ldiv0) from [<c0349ec0>] (samsung_pll6552_recalc_rate+0x54/0x64)
[<c0349ec0>] (samsung_pll6552_recalc_rate) from [<c0343db0>] (clk_recalc+0x44/0x58)
[<c0343db0>] (clk_recalc) from [<c0343ee4>] (__clk_recalc_rates+0x24/0x88)
[<c0343ee4>] (__clk_recalc_rates) from [<c0345b90>] (clk_register+0x420/0x5e0)
[<c0345b90>] (clk_register) from [<c0345dc8>] (clk_hw_register+0x8/0x14)
[<c0345dc8>] (clk_hw_register) from [<c0347eac>] (clk_hw_register_mux_table+0xcc/0x1ac)
[<c0347eac>] (clk_hw_register_mux_table) from [<c0347fd8>] (clk_hw_register_mux+0x4c/0x54)
[<c0347fd8>] (clk_hw_register_mux) from [<c073282c>] (samsung_clk_register_mux+0x60/0xac)
[<c073282c>] (samsung_clk_register_mux) from [<c0733684>] (s3c2443_common_clk_init+0xa0/0x268)
[<c0733684>] (s3c2443_common_clk_init) from [<c07324c8>] (of_clk_init+0x188/0x1fc)
[<c07324c8>] (of_clk_init) from [<c0721f44>] (time_init+0x28/0x34)
[<c0721f44>] (time_init) from [<c071eaa8>] (start_kernel+0x220/0x394)
[<c071eaa8>] (start_kernel) from [<00000000>] (  (null))
Division by zero in kernel.
CPU: 0 PID: 0 Comm: swapper Not tainted 4.15.10 #8
Hardware name: Samsung S3C2440 (Flattened Device Tree)
[<c0111014>] (unwind_backtrace) from [<c010dfd4>] (show_stack+0x10/0x14)
[<c010dfd4>] (show_stack) from [<c05b32d0>] (Ldiv0+0x8/0x10)
[<c05b32d0>] (Ldiv0) from [<c0349ec0>] (samsung_pll6552_recalc_rate+0x54/0x64)
[<c0349ec0>] (samsung_pll6552_recalc_rate) from [<c0343db0>] (clk_recalc+0x44/0x58)
[<c0343db0>] (clk_recalc) from [<c0343ee4>] (__clk_recalc_rates+0x24/0x88)
[<c0343ee4>] (__clk_recalc_rates) from [<c0343f18>] (__clk_recalc_rates+0x58/0x88)
[<c0343f18>] (__clk_recalc_rates) from [<c0345b90>] (clk_register+0x420/0x5e0)
[<c0345b90>] (clk_register) from [<c0345dc8>] (clk_hw_register+0x8/0x14)
[<c0345dc8>] (clk_hw_register) from [<c0346820>] (_register_divider+0xd0/0x114)
[<c0346820>] (_register_divider) from [<c07328dc>] (samsung_clk_register_div+0x64/0xdc)
[<c07328dc>] (samsung_clk_register_div) from [<c0733694>] (s3c2443_common_clk_init+0xb0/0x268)
[<c0733694>] (s3c2443_common_clk_init) from [<c07324c8>] (of_clk_init+0x188/0x1fc)
[<c07324c8>] (of_clk_init) from [<c0721f44>] (time_init+0x28/0x34)
[<c0721f44>] (time_init) from [<c071eaa8>] (start_kernel+0x220/0x394)
[<c071eaa8>] (start_kernel) from [<00000000>] (  (null))
Division by zero in kernel.
CPU: 0 PID: 0 Comm: swapper Not tainted 4.15.10 #8
Hardware name: Samsung S3C2440 (Flattened Device Tree)
[<c0111014>] (unwind_backtrace) from [<c010dfd4>] (show_stack+0x10/0x14)
[<c010dfd4>] (show_stack) from [<c05b32d0>] (Ldiv0+0x8/0x10)
[<c05b32d0>] (Ldiv0) from [<c0349ec0>] (samsung_pll6552_recalc_rate+0x54/0x64)
[<c0349ec0>] (samsung_pll6552_recalc_rate) from [<c0343db0>] (clk_recalc+0x44/0x58)
[<c0343db0>] (clk_recalc) from [<c0343ee4>] (__clk_recalc_rates+0x24/0x88)
[<c0343ee4>] (__clk_recalc_rates) from [<c0343f18>] (__clk_recalc_rates+0x58/0x88)
Division by zero in kernel.
CPU: 0 PID: 0 Comm: swapper Not tainted 4.15.10 #8
Hardware name: Samsung S3C2440 (Flattened Device Tree)
[<c0111014>] (unwind_backtrace) from [<c010dfd4>] (show_stack+0x10/0x14)
[<c010dfd4>] (show_stack) from [<c05b32d0>] (Ldiv0+0x8/0x10)
[<c05b32d0>] (Ldiv0) from [<c015f4b0>] (clockevents_config.part.2+0x18/0x78)
[<c015f4b0>] (clockevents_config.part.2) from [<c015f52c>] (clockevents_config_and_register+0x1c/0x28)
[<c015f52c>] (clockevents_config_and_register) from [<c07388d4>] (_samsung_pwm_clocksource_init+0x17c/0x298)
[<c07388d4>] (_samsung_pwm_clocksource_init) from [<c0738af8>] (samsung_pwm_alloc+0x108/0x134)
[<c0738af8>] (samsung_pwm_alloc) from [<c07386fc>] (timer_probe+0x44/0xa0)
[<c07386fc>] (timer_probe) from [<c071eaa8>] (start_kernel+0x220/0x394)
[<c071eaa8>] (start_kernel) from [<00000000>] (  (null))
------------[ cut here ]------------
WARNING: CPU: 0 PID: 0 at kernel/time/clockevents.c:44 cev_delta2ns+0x140/0x15c
Modules linked in:
CPU: 0 PID: 0 Comm: swapper Not tainted 4.15.10 #8
Hardware name: Samsung S3C2440 (Flattened Device Tree)
[<c0111014>] (unwind_backtrace) from [<c010dfd4>] (show_stack+0x10/0x14)
[<c010dfd4>] (show_stack) from [<c011bad0>] (__warn+0xcc/0xf4)
[<c011bad0>] (__warn) from [<c011bb34>] (warn_slowpath_null+0x3c/0x48)
[<c011bb34>] (warn_slowpath_null) from [<c015f328>] (cev_delta2ns+0x140/0x15c)
[<c015f328>] (cev_delta2ns) from [<c015f4e4>] (clockevents_config.part.2+0x4c/0x78)
[<c015f4e4>] (clockevents_config.part.2) from [<c015f52c>] (clockevents_config_and_register+0x1c/0x28)
[<c015f52c>] (clockevents_config_and_register) from [<c07388d4>] (_samsung_pwm_clocksource_init+0x17c/0x298)
[<c07388d4>] (_samsung_pwm_clocksource_init) from [<c0738af8>] (samsung_pwm_alloc+0x108/0x134)
[<c0738af8>] (samsung_pwm_alloc) from [<c07386fc>] (timer_probe+0x44/0xa0)
[<c07386fc>] (timer_probe) from [<c071eaa8>] (start_kernel+0x220/0x394)
[<c071eaa8>] (start_kernel) from [<00000000>] (  (null))
---[ end trace d70dfa618af44dc3 ]---
Division by zero in kernel.
CPU: 0 PID: 0 Comm: swapper Tainted: G        W        4.15.10 #8
Hardware name: Samsung S3C2440 (Flattened Device Tree)
[<c0111014>] (unwind_backtrace) from [<c010dfd4>] (show_stack+0x10/0x14)
[<c010dfd4>] (show_stack) from [<c05b2734>] (Ldiv0_64+0x8/0x18)
[<c05b2734>] (Ldiv0_64) from [<c0158cd8>] (clocks_calc_mult_shift+0x110/0x118)
[<c0158cd8>] (clocks_calc_mult_shift) from [<c0729bf8>] (sched_clock_register+0x54/0x234)
[<c0729bf8>] (sched_clock_register) from [<c073899c>] (_samsung_pwm_clocksource_init+0x244/0x298)
[<c073899c>] (_samsung_pwm_clocksource_init) from [<c0738af8>] (samsung_pwm_alloc+0x108/0x134)
[<c0738af8>] (samsung_pwm_alloc) from [<c07386fc>] (timer_probe+0x44/0xa0)
[<c07386fc>] (timer_probe) from [<c071eaa8>] (start_kernel+0x220/0x394)
[<c071eaa8>] (start_kernel) from [<00000000>] (  (null))
Division by zero in kernel.
CPU: 0 PID: 0 Comm: swapper Tainted: G        W        4.15.10 #8
Hardware name: Samsung S3C2440 (Flattened Device Tree)
[<c0111014>] (unwind_backtrace) from [<c010dfd4>] (show_stack+0x10/0x14)
[<c010dfd4>] (show_stack) from [<c05b2734>] (Ldiv0_64+0x8/0x18)
[<c05b2734>] (Ldiv0_64) from [<c0158d9c>] (clocks_calc_max_nsecs+0x28/0x74)
[<c0158d9c>] (clocks_calc_max_nsecs) from [<c0729c34>] (sched_clock_register+0x90/0x234)
[<c0729c34>] (sched_clock_register) from [<c073899c>] (_samsung_pwm_clocksource_init+0x244/0x298)
[<c073899c>] (_samsung_pwm_clocksource_init) from [<c0738af8>] (samsung_pwm_alloc+0x108/0x134)
[<c0738af8>] (samsung_pwm_alloc) from [<c07386fc>] (timer_probe+0x44/0xa0)
[<c07386fc>] (timer_probe) from [<c071eaa8>] (start_kernel+0x220/0x394)
[<c071eaa8>] (start_kernel) from [<00000000>] (  (null))
sched_clock: 16 bits at 0 Hz, resolution 0ns, wraps every 0ns
Division by zero in kernel.
CPU: 0 PID: 0 Comm: swapper Tainted: G        W        4.15.10 #8
Hardware name: Samsung S3C2440 (Flattened Device Tree)
[<c0111014>] (unwind_backtrace) from [<c010dfd4>] (show_stack+0x10/0x14)
[<c010dfd4>] (show_stack) from [<c05b2734>] (Ldiv0_64+0x8/0x18)
[<c05b2734>] (Ldiv0_64) from [<c0158d9c>] (clocks_calc_max_nsecs+0x28/0x74)
[<c0158d9c>] (clocks_calc_max_nsecs) from [<c0158f60>] (__clocksource_update_freq_scale+0x178/0x2c0)
[<c0158f60>] (__clocksource_update_freq_scale) from [<c01590b8>] (__clocksource_register_scale+0x10/0xa8)
[<c01590b8>] (__clocksource_register_scale) from [<c0738af8>] (samsung_pwm_alloc+0x108/0x134)
[<c0738af8>] (samsung_pwm_alloc) from [<c07386fc>] (timer_probe+0x44/0xa0)
[<c07386fc>] (timer_probe) from [<c071eaa8>] (start_kernel+0x220/0x394)
[<c071eaa8>] (start_kernel) from [<00000000>] (  (null))
clocksource: samsung_clocksource_timer: mask: 0xffff max_cycles: 0x0, max_idle_ns: 0 ns
Console: colour dummy device 80x30
Calibrating delay loop... 326.86 BogoMIPS (lpj=1634304)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
CPU: Testing write buffer coherency: ok
Setting up static identity map for 0x30108400 - 0x3010847c
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
futex hash table entries: 256 (order: -1, 3072 bytes)
pinctrl core: initialized pinctrl subsystem
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
S3C Power Management, Copyright 2004 Simtec Electronics
S3C2440: Initialising architecture
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
Advanced Linux Sound Architecture Driver Initialized.
Division by zero in kernel.
CPU: 0 PID: 1 Comm: swapper Tainted: G        W        4.15.10 #8
Hardware name: Samsung S3C2440 (Flattened Device Tree)
[<c0111014>] (unwind_backtrace) from [<c010dfd4>] (show_stack+0x10/0x14)
[<c010dfd4>] (show_stack) from [<c05b32d0>] (Ldiv0+0x8/0x10)
[<c05b32d0>] (Ldiv0) from [<c015588c>] (tk_setup_internals.constprop.3+0xcc/0x278)
[<c015588c>] (tk_setup_internals.constprop.3) from [<c0156128>] (timekeeping_notify+0x7c/0xe8)
[<c0156128>] (timekeeping_notify) from [<c0158a38>] (__clocksource_select+0x98/0xf0)
[<c0158a38>] (__clocksource_select) from [<c07298d0>] (clocksource_done_booting+0x2c/0x44)
[<c07298d0>] (clocksource_done_booting) from [<c0109a78>] (do_one_initcall+0x44/0x170)
[<c0109a78>] (do_one_initcall) from [<c071ed18>] (kernel_init_freeable+0xfc/0x1b8)
[<c071ed18>] (kernel_init_freeable) from [<c05c8aa0>] (kernel_init+0x8/0xec)
[<c05c8aa0>] (kernel_init) from [<c010a840>] (ret_from_fork+0x14/0x34)
clocksource: Switched to clocksource samsung_clocksource_timer
NET: Registered protocol family 2
TCP established hash table entries: 1024 (order: 0, 4096 bytes)
TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
TCP: Hash tables configured (established 1024 bind 1024)
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.
Initialise system trusted keyrings
workingset: timestamp_bits=30 max_order=14 bucket_order=0
jffs2: version 2.2. (NAND) (SUMMARY)  漏 2001-2006 Red Hat, Inc.
romfs: ROMFS MTD (C) 2007 R