第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > S5PV210 Linux内核移植 - 天嵌E8

S5PV210 Linux内核移植 - 天嵌E8

时间:2022-02-24 12:12:13

相关推荐

S5PV210  Linux内核移植 - 天嵌E8

1、获取Linux-4.19.114内核代码

从下载最新版本的内核:

https://mirrors./pub/linux/kernel/v4.x/linux-4.19.114.tar.xz

解压:tar -Jxvflinux-4.19.114.tar.xz

2、修改Makefile

ARCH ?= armCROSS_COMPILE ?= /usr/local/arm/gcc-linaro-6.5.0-.12-x86_64/bin/arm-linux-gnueabihf-

注意:根据自己的实际情况修改交叉编译工具链路径,交叉编译工具链版本太旧的话请更新到6.5.0

gcc-linaro:/components/toolchain/binaries/6.5-.12/arm-linux-gnueabihf/

3、添加自己的开发板

1.添加开发板默认配置文件

复制 arch/arm/configs/ 下的s5pv210_defconfig命名为tq-e8_defconfig(名字无所谓可以随便)

cd arch/arm/configs/cp s5pv210_defconfig tq-e8_defconfig

注意:文章中每一部分文件操作命令都是在内核文件夹linux-4.19.114下为起点开始的

2.添加开发板对应的设备树文件

复制 arch/arm/boot/dts/ 下的s5pv210-smdkv210.dts命名为s5pv210-tq-e8.dts(名字无所谓可以随便)

cd arch/arm/boot/dts/cp s5pv210-smdkv210.dts s5pv210-tq-e8.dts

文件复制后还需要再 arch/arm/boot/dts/Makefile 中添加一行 s5pv210-tq-e8.dts

3.修改设备树文件s5pv210-tq-e8.dts使其能在天嵌E8上启动系统

打开文件:arch/arm/boot/dts/s5pv210-tq-e8.dts

/ {model = "YIC System TQ-E8 based on S5PV210";compatible = "yic,tq-e8", "samsung,s5pv210";chosen {bootargs = "console=ttySAC0,115200n8 root=/dev/nfs nfsroot=192.168.0.200:/root/hanxiaohu/rootfs ip=192.168.0.50 rw rootwait ignore_loglevel earlyprintk";};memory@20000000 {device_type = "memory";reg = <0x20000000 0x20000000>; //内存起始地址0x20000000,内存大小512MB(0x20000000)};ethernet@88000000 { //修改DM9000compatible = "davicom,dm9000";reg = <0x88000000 0x2 0x88000004 0x2>;interrupt-parent = <&gph1>;interrupts = <2 4>;local-mac-address = [00 00 de ad be ef];davicom,no-eeprom;clocks = <&clocks CLK_SROMC>;clock-names = "sromc";};backlight {compatible = "pwm-backlight";pwms = <&pwm 3 5000000 0>;brightness-levels = <0 4 8 16 32 64 128 255>;default-brightness-level = <6>;pinctrl-names = "default";pinctrl-0 = <&pwm3_out>;};};//设置xxti的时钟频率,不然会导致计时器卡死无法启动系统!!!&xxti {clock-frequency = <24000000>;};&xusbxti {clock-frequency = <24000000>;};.........

4.修改dm9000驱动

因为内核启动过程成关闭了SROM的时钟,所以要在dm9000.c中开启时钟。

打开文件:drivers/net/ethernet/davicom/dm9000.c

(1)添加头文件引用

#include <linux/clk.h>

(2)在 1425 行左右的dm9000_probe()函数中添加一个

const char *clk_name;

(3)在 1578 行左右增加

/* Enable clock if specified */if (!of_property_read_string(dev->of_node, "clock-names", &clk_name)) {struct clk *clk = devm_clk_get(dev, clk_name);if (IS_ERR(clk)) {dev_err(dev, "cannot get clock of %s\n", clk_name);ret = PTR_ERR(clk);goto out;}clk_prepare_enable(clk);dev_info(dev, "enable clock '%s'\n", clk_name);}

修改结果如下:

-- linux-4.19/drivers/net/ethernet/davicom/dm9000.c +++ linux-4.19.ok/drivers/net/ethernet/davicom/dm9000.c@@ -40,6 +40,8 @@#include <linux/gpio.h>#include <linux/of_gpio.h>+#include <linux/clk.h> //add zb+#include <asm/delay.h>#include <asm/irq.h>#include <asm/io.h>@@ -1436,6 +1438,7 @@enum of_gpio_flags flags;struct regulator *power;bool inv_mac_addr = false;+ const char *clk_name;power = devm_regulator_get(dev, "vcc");if (IS_ERR(power)) {@@ -1572,6 +1575,20 @@ret = -EINVAL;goto out;} + + /* Enable clock if specified */+ if (!of_property_read_string(dev->of_node, "clock-names", &clk_name)) {+ struct clk *clk = devm_clk_get(dev, clk_name);+ if (IS_ERR(clk)) {+ dev_err(dev, "cannot get clock of %s\n", clk_name);+ ret = PTR_ERR(clk);+ goto out;+ }+ clk_prepare_enable(clk);+ dev_info(dev, "enable clock '%s'\n", clk_name);+ }+/* fill in parameters for net-dev structure */ndev->base_addr = (unsigned long)db->io_addr;

4、编译内核

1.默认配置

make tq-e8_defconfig

2.配置内核

make menuconfig

(1)配置默认调试输出串口

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

(2)支持网络功能

[*] Networking support ---> Networking options ---><*> Packet socket <*> Unix domain sockets[*] TCP/IP networking[*] IP: kernel level autoconfiguration [*]IP: DHCP support [*]IP: BOOTP support [*]IP: RARP support

(3)启用dm9000驱动

Device Drivers ---> [*] Network device support ---> [*] Network core driver support ......[*] Ethernet driver support ---><*> DM9000 support

最后只留下DM9000其他全部取消

(4)支持网络文件系统

File systems ---> [*] Network File Systems ---> <*> NFS client support <*>NFS client support for NFS version 2 (NEW)<*>NFS client support for NFS version 3 (NEW)[*] Root file system on NFS

3.编译

(1)编译内核

make -j8

(2)编译设备树

make dtbs

5、启动测试

自己在ubuntu上搭建好tftp服务器和nfs服务器,将编译好的内核放到tftp。

准备好网络启动的根文件系统

1.设置u-boot启动参数

setenv bootcmd 'tftp 30000000 s5pv210-tq-e8.dtb;tftpboot 20008000 zImage;fdt addr 30000000; bootz 20008000 - 30000000'setenv bootargs 'console=ttySAC0,115200 root=/dev/nfs rw nfsroot=192.168.0.200:/home/hanxiaohu/linux/netboot/nfs/s5pv210/rootfs ip=192.168.0.41:192.168.0.200:192.168.0.1:255.255.255.0::eth0:off earlyprintk'saveenv

2.启动测试

u-boot下执行boot启动

boot

3.启动信息

U-Boot .01-g499aa08-dirty (Mar 17 - 08:28:38 +0800), Build: S5PV210 for TQ-E8CPU: S5PC110 @ 1 GHzModel: Samsung Goni based on S5PC110Board: TQ-E8 S5PV210DRAM: 512 MiBMMC: SAMSUNG SDHCI: 0, SAMSUNG SDHCI: 1In: serialOut: serialErr: serialNet: dm9000TQ-E8 #TQ-E8 # setenv bootcmd 'tftp 30000000 s5pv210-tq-e8.dtb;tftpboot 20008000 zImage;fdt addr 30000000; bootz 20008000 - 30000000'TQ-E8 #TQ-E8 # setenv bootargs 'console=ttySAC0,115200 root=/dev/nfs rw nfsroot=192.168.0.200:/home/hanxiaohu/linux/netboot/nfs/s5pv210/rootfs ip=192.168.0.41:192.168.0.200:192.168.0.1:255.255.255.0::eth0:off earlyprintk'TQ-E8 #TQ-E8 # saveenvSaving Environment to MMC...Writing to MMC(0)... doneTQ-E8 # bootdm9000 i/o: 0x88000000, id: 0x90000a46DM9000: running in 16 bit modeMAC: 00:19:d3:fe:56:33operating at 100M full duplex modeUsing dm9000 deviceTFTP from server 192.168.0.200; our IP address is 192.168.0.50Filename 's5pv210-tq-e8.dtb'.Load address: 0x30000000Loading: ##1.6 MiB/sdoneBytes transferred = 24979 (6193 hex)dm9000 i/o: 0x88000000, id: 0x90000a46DM9000: running in 16 bit modeMAC: 00:19:d3:fe:56:33operating at 100M full duplex modeUsing dm9000 deviceTFTP from server 192.168.0.200; our IP address is 192.168.0.50Filename 'zImage'.Load address: 0x20008000Loading: ####################################################################################################################################################################################################################################################################1.6 MiB/sdoneBytes transferred = 3807360 (3a1880 hex)Kernel image @ 0x20008000 [ 0x000000 - 0x3a1880 ]## Flattened Device Tree blob at 30000000Booting using the fdt blob at 0x30000000Loading Device Tree to 3af5f000, end 3af68192 ... OKStarting kernel ...Booting Linux on physical CPU 0x0Linux version 4.19.114 (hanxiaohu@Ubuntu16) (gcc version 6.5.0 (Linaro GCC 6.5-.12)) #1 PREEMPT Thu Apr 9 22:24:37 CST CPU: ARMv7 Processor [412fc082] revision 2 (ARMv7), cr=10c5387dCPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cacheOF: fdt: Machine model: YIC System TQ-E8 based on S5PV210bootconsole [earlycon0] enabledMemory policy: Data cache writebackCPU: All CPU(s) started in SVC mode.random: get_random_bytes called from start_kernel+0x94/0x410 with crng_init=0Built 1 zonelists, mobility grouping on. Total pages: 130048Kernel command line: console=ttySAC0,115200 root=/dev/nfs rw nfsroot=192.168.0.200:/home/hanxiaohu/linux/netboot/nfs/s5pv210/rootfs ip=192.168.0.41:192.168.0.200:192.168.0.1:255.255.255.0::eth0:off earlyprintkDentry cache hash table entries: 65536 (order: 6, 262144 bytes)Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)Memory: 509952K/524288K available (6144K kernel code, 207K rwdata, 1536K rodata, 1024K init, 249K bss, 14336K reserved, 0K cma-reserved)Virtual kernel memory layout:vector : 0xffff0000 - 0xffff1000 ( 4 kB)fixmap : 0xffc00000 - 0xfff00000 (3072 kB)vmalloc : 0xa0800000 - 0xff800000 (1520 MB)lowmem : 0x80000000 - 0xa0000000 ( 512 MB)modules : 0x7f000000 - 0x80000000 ( 16 MB).text : 0x(ptrval) - 0x(ptrval) (7136 kB).init : 0x(ptrval) - 0x(ptrval) (1024 kB).data : 0x(ptrval) - 0x(ptrval) ( 208 kB).bss : 0x(ptrval) - 0x(ptrval) ( 250 kB)SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1rcu: Preemptible hierarchical RCU implementation.Tasks RCU enabled.NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16VIC @(ptrval): id 0x00041192, vendor 0x41VIC @(ptrval): id 0x00041192, vendor 0x41VIC @(ptrval): id 0x00041192, vendor 0x41VIC @(ptrval): id 0x00041192, vendor 0x41S5PV210 clocks: mout_apll = 1000000000, mout_mpll = 667000000mout_epll = 80000000, mout_vpll = 54000000sched_clock: 32 bits at 33MHz, resolution 29ns, wraps every 64392313329nsclocksource: samsung_clocksource_timer: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 57309158834 nsConsole: colour dummy device 80x30Calibrating delay loop... 996.14 BogoMIPS (lpj=4980736)pid_max: default: 32768 minimum: 301Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)CPU: Testing write buffer coherency: okCPU0: Spectre v2: firmware did not set auxiliary control register IBE bit, system vulnerableSetting up static identity map for 0x0000 - 0x0060rcu: Hierarchical SRCU implementation.devtmpfs: initializedVFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 2clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 nsfutex hash table entries: 256 (order: 0, 7168 bytes)pinctrl core: initialized pinctrl subsystemNET: Registered protocol family 16DMA: preallocated 256 KiB pool for atomic coherent allocationsSCSI subsystem initializedusbcore: registered new interface driver usbfsusbcore: registered new interface driver hubusbcore: registered new device driver usbclocksource: Switched to clocksource samsung_clocksource_timerNET: Registered protocol family 2tcp_listen_portaddr_hash hash table entries: 256 (order: 0, 6144 bytes)TCP established hash table entries: 4096 (order: 2, 16384 bytes)TCP bind hash table entries: 4096 (order: 4, 81920 bytes)TCP: Hash tables configured (established 4096 bind 4096)UDP hash table entries: 256 (order: 1, 12288 bytes)UDP-Lite hash table entries: 256 (order: 1, 12288 bytes)NET: Registered protocol family 1RPC: 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 keyringsworkingset: timestamp_bits=30 max_order=17 bucket_order=0NFS: Registering the id_resolver key typeKey type id_resolver registeredKey type id_legacy registeredromfs: ROMFS MTD (C) Red Hat, Inc.Key type asymmetric registeredAsymmetric key parser 'x509' registeredio scheduler noop registeredio scheduler deadline registeredio scheduler cfq registered (default)io scheduler mq-deadline registeredio scheduler kyber registeredSerial: 8250/16550 driver, 4 ports, IRQ sharing disablede2900000.serial: ttySAC0 at MMIO 0xe2900000 (irq = 58, base_baud = 0) is a S3C6400/10console [ttySAC0] enabledconsole [ttySAC0] enabledbootconsole [earlycon0] disabledbootconsole [earlycon0] disablede2900400.serial: ttySAC1 at MMIO 0xe2900400 (irq = 59, base_baud = 0) is a S3C6400/10e2900800.serial: ttySAC2 at MMIO 0xe2900800 (irq = 60, base_baud = 0) is a S3C6400/10e2900c00.serial: ttySAC3 at MMIO 0xe2900c00 (irq = 61, base_baud = 0) is a S3C6400/10exynos4-fb f8000000.fimd: failed to get system register.OF: graph: no port node found in /soc/fimd@f8000000[drm] Exynos DRM: using f8000000.fimd device for DMA mapping operationsexynos-drm exynos-drm: bound f8000000.fimd (ops fimd_component_ops)[drm] Supports vblank timestamp caching Rev 2 (21.10.).[drm] No driver support for vblank timestamp query.Console: switching to colour frame buffer device 100x30exynos-drm exynos-drm: fb0: frame buffer device[drm] Initialized exynos 1.1.0 0330 for exynos-drm on minor 0brd: module loadedloop: module loadeddm9000 88000000.ethernet: 88000000.ethernet supply vcc not found, using dummy regulatordm9000 88000000.ethernet: Linked as a consumer to regulator.0dm9000 88000000.ethernet: enable clock 'sromc'eth0: dm9000b at (ptrval),(ptrval) IRQ 144 MAC: 00:00:de:ad:be:ef (platform data)ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driverehci-exynos: EHCI EXYNOS driverohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driverohci-exynos: OHCI EXYNOS driversdhci: Secure Digital Host Controller Interface driversdhci: Copyright(c) Pierre Ossmans3c-sdhci eb000000.sdhci: clock source 0: mmc_busclk.0 (133400000 Hz)s3c-sdhci eb000000.sdhci: clock source 2: mmc_busclk.2 (80000000 Hz)mmc0: SDHCI controller on samsung-hsmmc [eb000000.sdhci] using ADMAs3c-sdhci eb100000.sdhci: clock source 0: mmc_busclk.0 (133400000 Hz)s3c-sdhci eb100000.sdhci: clock source 2: mmc_busclk.2 (80000000 Hz)mmc1: SDHCI controller on samsung-hsmmc [eb100000.sdhci] using ADMAs3c-sdhci eb200000.sdhci: clock source 0: mmc_busclk.0 (133400000 Hz)s3c-sdhci eb200000.sdhci: clock source 2: mmc_busclk.2 (80000000 Hz)mmc0: new high speed MMC card at address 0001mmcblk0: mmc0:0001 004G90 3.69 GiBmmcblk0boot0: mmc0:0001 004G90 partition 1 2.00 MiBmmcblk0boot1: mmc0:0001 004G90 partition 2 2.00 MiBmmc2: SDHCI controller on samsung-hsmmc [eb200000.sdhci] using ADMAs3c-sdhci eb300000.sdhci: clock source 0: mmc_busclk.0 (133400000 Hz)s3c-sdhci eb300000.sdhci: clock source 3: mmc_busclk.3 (80000000 Hz)mmcblk0rpmb: mmc0:0001 004G90 partition 3 512 KiB, chardev (252:0)mmcblk0: p1 p2 p3mmc3: Internal clock never stabilised.mmc3: sdhci: ============ SDHCI REGISTER DUMP ===========mmc3: sdhci: Sys addr: 0x00000000 | Version: 0x00002401mmc3: sdhci: Blk size: 0x00000000 | Blk cnt: 0x00000000mmc3: sdhci: Argument: 0x00000000 | Trn mode: 0x00000000mmc3: sdhci: Present: 0x00fa0000 | Host ctl: 0x00000000mmc3: sdhci: Power:0x0000000e | Blk gap: 0x00000000mmc3: sdhci: Wake-up: 0x00000000 | Clock: 0x00008001mmc3: sdhci: Timeout: 0x00000000 | Int stat: 0x00000000mmc3: sdhci: Int enab: 0x00ff0043 | Sig enab: 0x00ff0043mmc3: sdhci: ACmd stat: 0x00000000 | Slot int: 0x00000000mmc3: sdhci: Caps:0x05e80080 | Caps_1: 0x00000000mmc3: sdhci: Cmd: 0x00000000 | Max curr: 0x00000000mmc3: sdhci: Resp[0]: 0x00000000 | Resp[1]: 0x00000000mmc3: sdhci: Resp[2]: 0x00000000 | Resp[3]: 0x00000000mmc3: sdhci: Host ctl2: 0x00000000mmc3: sdhci: ADMA Err: 0x00000000 | ADMA Ptr: 0x00000000mmc3: sdhci: ============================================mmc2: new high speed SDHC card at address 2177mmcblk2: mmc2:2177 APPSD 3.77 GiBmmcblk2: p1mmc3: SDHCI controller on samsung-hsmmc [eb300000.sdhci] using ADMAusbcore: registered new interface driver usbhidusbhid: USB HID core driverNET: Registered protocol family 10Segment Routing with IPv6sit: IPv6, IPv4 and MPLS over IPv4 tunneling driverNET: Registered protocol family 17Key type dns_resolver registeredLoading compiled-in X.509 certificateshctosys: unable to open rtc device (rtc0)dm9000 88000000.ethernet eth0: link downdm9000 88000000.ethernet eth0: link downIPv6: ADDRCONF(NETDEV_UP): eth0: link is not readyrandom: fast init doneIPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes readyIP-Config: Complete:device=eth0, hwaddr=00:00:de:ad:be:ef, ipaddr=192.168.0.41, mask=255.255.255.0, gw=192.168.0.1host=192.168.0.41, domain=, nis-domain=(none)bootserver=192.168.0.200, rootserver=192.168.0.200, rootpath=VFS: Mounted root (nfs filesystem) on device 0:12.devtmpfs: mountedFreeing unused kernel memory: 1024KRun /sbin/init as init processdm9000 88000000.ethernet eth0: link up, 100Mbps, full-duplex, lpa 0x45E1Please press Enter to activate this console.[root@S5PV210 ]#[root@S5PV210 ]# lsbinetchello.c linuxrc procsbintmpvardevhello libmntrootsysusr[root@S5PV210 ]# ./hellohello world!hello world!hello world![root@S5PV210 ]#

到此内核移植成功!

参考文章:

/JerryGou/article/details/85109733

/qq_16777851/article/details/87207159

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。