基于tiny4412的Linux内核移植(支持device tree)(二)

发布者:数据梦想最新更新时间:2023-06-20 来源: elecfans关键字:tiny4412  Linux  内核移植 手机看文章 扫描二维码
随时随地手机看文章

平台简介

开发板:tiny4412ADK + S700 + 4GB Flash

要移植的内核版本:Linux-4.4.0 (支持device tree)

u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动)

busybox版本:busybox 1.25

交叉编译工具链: arm-none-linux-gnueabi-gcc

      (gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29))


步骤

继续上文。

由于Linux-4.4.0对tiny4412已经有了很好的支持,所以留给我们的工作就很少了。

一、修改arch/arm/boot/dts/exynos4412-tiny4412.dts

diff --git a/arch/arm/boot/dts/exynos4412-tiny4412.dts b/arch/arm/boot/dts/exynos4412-tiny4412.dts

index 4840bbd..aeca42a 100644

--- a/arch/arm/boot/dts/exynos4412-tiny4412.dts

+++ b/arch/arm/boot/dts/exynos4412-tiny4412.dts

@@ -21,6 +21,7 @@

 

        chosen {

                stdout-path = &;serial_0;

+               bootargs = "root=/dev/ram0 rw rootfstype=ext4 console=ttySAC0,115200 init=/linuxrc earlyprintk";

        };

 

        memory {

@@ -78,7 +79,7 @@

        bus-width = <;4>;

        pinctrl-0 = <;&sd2_clk &sd2_cmd &sd2_cd &sd2_bus4>;

        pinctrl-names = "default";

-       status = "okay";

+       status = "disabled";

 };

 

 &;serial_0 {

这里关键的一点是在chosen中增加了bootargs的设置,上面设置bootargs表示的意思是:根文件系统是ramdisk,可读写,文件系统类型是ext4格式,串口终端使用ttySAC0,波特率是115200,earlyprintk用于打印内核启动早期的一些log,它会把printk的信息打印到一个叫做bootconsole的终端上,在真正的console注册后,bootconsole会被disable掉,要想使用earlyprintk,需要在内核中做相关的配置,这个下面再说。bootargs的设置很灵活,既可以在内核的设备树中设置,也可以在u-boot中设置,需要注意的是:如果在u-boot中设置了bootargs的话,在bootm的时候u-boot会用自己的bootargs来覆盖设备树里的bootargs( do_bootm_linux -> bootm_linux_fdt -> fdt_chosen)。还有一点是把SD卡控制器2给禁掉了,目前SD控制器的初始化还有些问题,会导致内核挂掉,这个以后再解决,因为我们将来先用ramdisk做根文件系统,跟eMMC和SD卡都没有关系。


二、制作ramdisk根文件系统


1、制作ramdisk,首先需要下载busybox的代码,可以从https://busybox.net/downloads/下载,然后编译出根文件系统,具体过程我这里就不写了,网上有很多这方面的资料。我已经制作好了一个可用了文件系统,可以从下面的地址处下载:


https://files.cnblogs.com/files/pengdonglin137/rootfs.tar.gz


下载完成后,解压缩,开始制作ramdisk,制作的过程我写了一个脚本 mk_ramdisk.sh


#!/bin/bash

 

rm -rf ramdisk*

 

sudo dd if=/dev/zero of=ramdisk bs=1k count=8192

 

sudo mkfs.ext4 -F ramdisk

 

sudo mkdir -p ./initrd

sudo mount -t ext4 ramdisk ./initrd

 

sudo cp rootfs/* ./initrd -raf

 

sudo mknod initrd/dev/console c 5 1

sudo mknod initrd/dev/null c 1 3

 

sudo umount ./initrd

 

sudo gzip --best -c ramdisk >; ramdisk.gz

 

sudo mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img

 

最后生成的ramdisk.img就是我们需要的,在上面的脚本中生成的ramdisk镜像也可以作为ramdisk使用,用法下面再说。


下面的链接是一个已经制作好的ramdisk镜像,解压后即可使用:


https://files.cnblogs.com/files/pengdonglin137/ramdisk.zip


2、配置内核,支持ramdisk


make menuconfig

File systems --->;

    <*> Second extended fs support

Device Drivers

    SCSI device support --->;

        <*> SCSI disk support

    Block devices --->;

        <*>RAM block device support

        (16)Default number of RAM disks

        (8192) Default RAM disk size (kbytes) (修改为8M)

General setup --->;

    [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

这个exynos的默认配置就已经支持了。


3、配置内核,使其支持tmpfs


$ make menuconfig

File systems --->;

    Pseudo filesystems --->

        [*] Virtual memory file system support (former shm fs)

        [*] Tmpfs POSIX Access Control Lists

这个exynos的默认配置也已经支持了。


三、编译内核


1、首先要设置使用的交叉编译工具链


diff --git a/Makefile b/Makefile

index 70dea02..5d96411 100644

--- a/Makefile

+++ b/Makefile

@@ -248,8 +248,8 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/x86/ -e s/x86_64/x86/

 # "make" in the configured kernel build directory always uses that.

 # Default value for CROSS_COMPILE is not to prefix executables

 # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile

-ARCH           ?= $(SUBARCH)

-CROSS_COMPILE  ?= $(CONFIG_CROSS_COMPILE:"%"=%)

+ARCH           ?= arm

+CROSS_COMPILE  ?= /root/tiny4412_android5/SysPort/cross_compile/arm-2014.05/bin/arm-none-linux-gnueabi-

2、编译


make exynos_defconfig

make uImage LOADADDR=0x40008000 -j2

生成的uImage在arch/arm/boot下。 


四、编译设备树


make dtbs

然后在 arch/arm/boot/dts/会生成tiny4412上用的设备树镜像文件exynos4412-tiny4412.dtb。


五、测试


由于tiny4412的u-boot目前还不支持usb网卡,只能使用dnw来下载,并且tiny4412的u-boot中已经自带了dnw命令了。开发机上运行的dnw的代码可以到下面的链接下载:


https://files.cnblogs.com/files/pengdonglin137/dnw.tar.gz


下载完成后解压,在压缩包里已经有一个编译好的dnw可执行程序。也可执行make,会自动编译生成一个dnw可执行程序,要编译的话,机器上要安装usb相关的库,安装命令如下:


sudo  apt-get install libusb-dev


有了dnw,下面开始测试。


启动开发板,进入u-boot命令模式;

下载uImage

在u-boot里执行下载uImage的命令: dnw 0x40600000   (这个地址不唯一)


在开发机中执行:dnw arch/arm/boot/uImage


下载ramdisk

在u-boot里执行下载uImage的命令: dnw 0x41000000   (这个地址不唯一)


在开发机中执行:dnw ramdisk.img


下载设备树镜像

在u-boot里执行下载uImage的命令: dnw 0x42000000   (这个地址不唯一)


在开发机中执行:dnw arch/arm/boot/dts/exynos4412-tiny4412.dtb


启动内核

使用bootm启动内核:bootm 0x40600000 0x41000000 0x42000000


下面是完整的启动log:


U-Boot 2010.12-00000-gb391276-dirty (Jan 17 2016 - 06:03:22) for TINY4412



CPU:    S5PC220 [Samsung SOC on SMP Platform Base on ARM CortexA9]

        APLL = 1400MHz, MPLL = 800MHz


Board:  TINY4412

DRAM:   1023 MiB


vdd_arm: 1.2

vdd_int: 1.0

vdd_mif: 1.1


BL1 version:  N/A (TrustZone Enabled BSP)



Checking Boot Mode ... SDMMC

REVISION: 1.1

MMC Device 0: 3803 MB

MMC Device 1: 3728 MB

MMC Device 2: N/A

*** Warning - using default environment


Net:    No ethernet found.

Hit any key to stop autoboot:  0 

TINY4412 # dnw 0x41000000

OTG cable Connected!

Now, Waiting for DNW to transmit data

Download Done!! Download Address: 0x41000000, Download Filesize:0x27752e

Checksum is being calculated...

Checksum O.K.

TINY4412 # dnw 0x42000000

OTG cable Connected!

Now, Waiting for DNW to transmit data

Download Done!! Download Address: 0x42000000, Download Filesize:0xa53a

Checksum is being calculated.

Checksum O.K.

TINY4412 # dnw 0x40600000

OTG cable Connected!

Now, Waiting for DNW to transmit data

Download Done!! Download Address: 0x40600000, Download Filesize:0x43b5d0

Checksum is being calculated.....

Checksum O.K.

TINY4412 # bootm 0x40600000 0x41000000 0x42000000

## Booting kernel from Legacy Image at 40600000 ...

   Image Name:   Linux-4.4.0-gbd49c0f-dirty

   Image Type:   ARM Linux Kernel Image (uncompressed)

   Data Size:    4437392 Bytes = 4333 KiB

   Load Address: 40008000

   Entry Point:  40008000

   Verifying Checksum ... OK

## Loading init Ramdisk from Legacy Image at 41000000 ...

   Image Name:   ramdisk

   Image Type:   ARM Linux RAMDisk Image (gzip compressed)

   Data Size:    2585838 Bytes = 2525 KiB

   Load Address: 00000000

   Entry Point:  00000000

   Verifying Checksum ... OK

## Flattened Device Tree blob at 42000000

   Booting using the fdt blob at 0x42000000

   Loading Kernel Image ... OK

OK

## Loading init Ramdisk from Legacy Image at 41000000 ...

   Image Name:   ramdisk

   Image Type:   ARM Linux RAMDisk Image (gzip compressed)

   Data Size:    2585838 Bytes = 2525 KiB

   Load Address: 00000000

   Entry Point:  00000000

   Verifying Checksum ... OK

   Loading Ramdisk to 43a84000, end 43cfb4ee ... OK

   Loading Device Tree to 413f2000, end 413ff539 ... OK


Starting kernel ...


Uncompressing Linux... done, booting the kernel.

[    0.000000] Booting Linux on physical CPU 0xa00

[    0.000000] Linux version 4.4.0-gbd49c0f-dirty (root@ubuntu) (gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29) ) #24 SMP PREEMPT Tue Jan 19 05:39:48 PST 2016

[    0.000000] CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=10c5387d

[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache

[    0.000000] Machine model: FriendlyARM TINY4412 board based on Exynos4412

[    0.000000] bootconsole [earlycon0] enabled

[    0.000000] cma: Reserved 64 MiB at 0x7bc00000

[    0.000000] Memory policy: Data cache writealloc

[    0.000000] Samsung CPU ID: 0xe4412011

[    0.000000] PERCPU: Embedded 12 pages/cpu @ef79b000 s18816 r8192 d22144 u49152

[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 260352

[    0.000000] Kernel command line: root=/dev/ram0 rw rootfstype=ext4 console=ttySAC0,115200 init=/linuxrc earlyprintk

[    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: 960832K/1047552K available (5863K kernel code, 292K rwdata, 2284K rodata, 440K init, 315K bss, 21184K reserved, 65536K cma-reserved, 195584K highmem)

[    0.000000] Virtual kernel memory layout:

[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)

[    0.000000]     fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)

[    0.000000]     vmalloc : 0xf0800000 - 0xff800000   ( 240 MB)

[    0.000000]     lowmem  : 0xc0000000 - 0xf0000000   ( 768 MB)

[    0.000000]     pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)

[    0.000000]     modules : 0xbf000000 - 0xbfe00000   (  14 MB)

[    0.000000]       .text : 0xc0008000 - 0xc07fd188   (8149 kB)

[1] [2]
关键字:tiny4412  Linux  内核移植 引用地址:基于tiny4412的Linux内核移植(支持device tree)(二)

上一篇:基于tiny4412的Linux内核移植(支持device tree)(一)
下一篇:基于tiny4412的Linux内核移植(支持device tree)(三)

推荐阅读最新更新时间:2024-10-09 20:42

风河与Intel合作推出MID Linux平台快速发展
  7月11日,设备软件优化(DSO)厂商风河系统公司(Wind River)日前宣布与Intel合作共同推动MID(Mobile Internet Device, 移动互联网设备)市场的快速发展。 借助于Intel公司的支持,风河将推出面向MID市场的开放式、可扩展的Moblin Linux平台。此外,风河还将推出针对Intel Centrino Atom处理器进行优化的商用级Moblin Linux平台。Wind River Linux Platform for Mobile Internet Devices是一个涵盖了Linux系统发布、中间件和移动应用的全功能、商用级Linux平台,为用户带来更为丰富的Interne
[新品]
基于Linux的MISC类设备AD7859L的驱动程序开发
1 引言 在嵌入式系统中基于ARM微核的嵌入式处理器已经成为市场主流。随着ARM技术的广泛应用,建立面向ARM构架的嵌入式操作系统成为测量行业的热点问题。在LINUX操作系统中添加新的外部设备时,只需为其添加对应的驱动程序即可。介绍另一种驱动程序的编写方式,即采用MISC类设备。其实质也是一个字符设备。可将用户各种不同的驱动设备类型合成到一种类型中,共用一个主设备号,通过不同的次设备号和设备节点名来区分。可方便管理这些驱动模块。字符型的驱动设备模块在挂载时都要分配主设备号、次设备号和创建设备节点名,在卸载驱动设备时还必须同时删掉设备节点名。通过采用MISC类设备,在挂载设备驱动时无须再用到mknod命令分配主设备号、次设备号和
[嵌入式]
基于嵌入式Linux平台的多协议路由器设计
   引言   随着社会信息化进程和互联网的飞迅发展,对无线环境下提供数据服务的需求变得更加迫切。传统的无线移动网络通常以固定的基础设施为支撑,无法满足人们对日益增长的通信业务的要求,一种新型的无线网络——AdHoc网络应运而生。Ad Hoc网络又称移动自组网、多跳网络,具备细网灵活、快捷,不受有线网络的影响等特点,可广泛应用于军事和救援等无法或不便预先铺设网络设施的场合。此外,Ad Hoc网络朝着网络互连的方向发展,Internet的接入是其中一项主要内容。   Ad Hoc无线网络具有自身的特殊性,在组建实际使用的无线工作网络时,必须充分考虑网络的应用规模和扩展性,以及应用的可靠程度及实时性要求,选择合适的网络拓扑结构。目前
[应用]
迅为4412开发板Linux设备树的镜像烧写和源码简单优化教程
1 烧写: 烧写和4412默认镜像的烧写类似,使用fastboot。 先更新uboot,用4412默认uboot更新支持设备树的uboot 用支持设备树的uboot烧写。 进入支持设备树的uboot控制台 支持设备树的uboot控制台,使用命令:fastboot 0 这里可能需要更新一下驱动,使用驱动精灵自动安装即可。 在cmd命令行,用fastboot烧写: fastboot.exe flash bootloader u-boot-iTOP-4412.bin fastboot.exe flash kernel uImage fastboot.exe flash dtb e
[单片机]
迅为4412开发板<font color='red'>Linux</font>设备树的镜像烧写和源码简单优化教程
Linux设备驱动中的异步通知与异步I/O
异步通知概念: 异步通知的意识是,一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上的“中断”概念,比较准确的称谓是“信号驱动的异步IO”,信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求是一样的。信号是异步的,一个进进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。 异步通知与设备访问: 阻塞IO意味着一直等待设备可访问后访问;非阻塞IO使用poll意味着查询设备是否可以访问;而异步通知则意味着设备通知自身可访问,实现了异步I/O。 用kill -l 命令可以查看Linux可用的信号 信号的接收
[单片机]
<font color='red'>Linux</font>设备驱动中的异步通知与异步I/O
[JZ2440] 配置编译 linux-2.6 内核
一、相关资料获取   我个人在学习 mini2440 开发板时是跟着韦东山老师的视频学习的,视频和资料可以访问百问网论坛获取。   百问网论坛链接: http://www.100ask.net/bbs/forum.php   下载好资料后在 JZ2440资料光盘 文件中 systems 目录下可以获取到 linux-2.6.22.6.tar.bz2(内核源码包)和 linux-2.6.22.6_jz2440.patch(韦东山老师移植 linux-2.6 到 JZ2440 开发板的 patch 包)。在第一期视频目录下可以获取到 韦东山Linux视频第1第2期所有源码文档图片芯片手册.rar 压缩包。 二、配置编译
[单片机]
Linux嵌入式系统开发平台选型探讨
摘要:使用Linux进行嵌入式产品开发有一个很大的优势,就是开发资源丰富,且成本低廉;但是,技术路线复杂多样,专业人才相对匮乏是Linux嵌入式系统开发面临的一个难题。本文从实际应用的角度,探讨和研究Linux嵌入式系统开发中的平台选型问题,以期望对各位Linux开发研究者有些许裨益。 关键词:嵌入式系统 Linux开发平台 选型 1 嵌入式系统与Linux   按照电气工程师协会的一个定义:嵌入式系统是用来控制或监视机器、装置或工厂等的大规模系统的设备。具体说来,它是电脑软件和硬件的综合体;是以应用为中心,以计算机技术为基础,软硬件可裁减,从而能够适应实际应用中对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统
[嵌入式]
嵌入式linux软件如何进行数据参数保存
大多数软件开发都会涉及到数据参数的保存与读取,小至运行的单片机的软件,大至操作系统级别的软件(如linux,windows,mac),均会有专门的子程序或者模块进行参数的保存和读取。不同的平台下开发,参数的保存与读取会存在一定的差异化,例如,单片机下,保存参数是写入eeprom或者 rom,windows和linux下的软件则会以配置文件的形式保存参数。下面以我以前在工作中所遇到情况,重点写写嵌入式linux软件是如何进行的数据参数的保存。 一 以二进制数据保存参数。 以二进制形式保存参数是很是常见的一种方案,也是很多项目组用于保存参数的一种方案。以我们现有的软件平台中的方案为例吧。 我们的软件平台基于嵌入式linux, f
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved