开发环境:win10 64位 + VMware12 + Ubuntu14.04 32位

工具链:linaro提供的gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi

要移植的kernel版本:linux-4.4

Tiny4412开发板硬件版本为

  底板:  Tiny4412SDK 1312B

  核心板:Tiny4412 - 1306

 

1、下载、解压内核

linux-4.4.tar.gz 

2、配置

  1)配置开发板类型及指定交叉编译链

diff --git a/arch/arm/boot/dts/exynos4412-tiny4412.dts b/arch/arm/boot/dts/exyno
index 4840bbd..048ae67 100644
--- a/arch/arm/boot/dts/exynos4412-tiny4412.dts
+++ b/arch/arm/boot/dts/exynos4412-tiny4412.dts
@@ -21,6 +21,7 @@ESCOD
index 70dea02..42b0d63 100644
--- a/Makefile
+++ b/Makefile
@@ -248,8 +248,11 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/x86/ -e s/x86_6# "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          ?= $(SUBARCH)
+#CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
+
+ARCH           ?= arm
+CROSS_COMPILE  ?= /usr/local/ARM-toolchian/gcc-linaro-6.1.1-2016.08-i686_arm-linux-gnueabi/bin/arm-linux-gnueabi-# Architecture as present in compile.hUTS_MACHINE    := $(ARCH)

  

  2)修改设备树

diff --git a/arch/arm/boot/dts/exynos4412-tiny4412.dts b/arch/arm/boot/dts/exyno
index 4840bbd..048ae67 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,8 @@bus-width = <4>;pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_cd &sd2_bus4>;pinctrl-names = "default";
-       status = "okay";
+   /* 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卡都没有关系

3,配置内核支持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的默认配置就已经支持了。

4.配置内核支持Tmpfs

$ make menuconfig

File systems --->;
   Pseudo filesystems --->
        [*] Virtual memory file system support (former shm fs)
        [*] Tmpfs POSIX Access Control Lists这个exynos的默认配置也已经支持了。

5.编译内核

第一次编译需要获取exynos配置

make exynos_defconfig

root@ubuntu:/home/arm/linux-4.4# cat build.sh
#!/bin/bashecho "---------------"
echo "rm ./ uImage and dtb"
rm uImage exynos4412-tiny4412.dtbecho "make"
make uImage LOADADDR=0x40007000 -j4echo "make dtb"
make dtbsecho "backup config"
cp .config tiny4412_defconfigecho "copy uImage"
cp arch/arm/boot/uImage ./echo "copy dtb"
cp arch/arm/boot/dts/exynos4412-tiny4412.dtb ./echo "over"

编写脚本。执行,烧写

即可初步启动kernel

---------------------------------------------------------------------------------------------------------------------------------------------------------------

问题:启动后如果显示文件太多会出现

dma-pl330 12680000.pdma: Reset Channel-1 CS-20000f FTC-20000
[ 1573.447654] dma-pl330 12680000.pdma: Reset Channel-1 CS-20000f FTC-20000

参考:https://blog.csdn.net/sinat_20006769/article/details/79060779

说是DMA驱动的问题,按照介绍取消dma-pl330后,kernel无法启动

参考:https://blog.csdn.net/hyyoxhk/article/details/83305367

修改arch/arm/boot/dts/exynos4412-tiny4412.dts中,serial_0的dmas导致卡死,serial_2的dmas无效果

参考:https://blog.csdn.net/qq_25370227/article/details/84891632

是uboot中TrustZone造成,目前未尝试

--------------------------------------------------------------------------------------------------------------------------------------------------------------

已解决:就是TrustZone造成,具体查看:linux-kernel-4.4 移植 (2)解决上部遗留DMA-PL330的问题

————————————————————————————————————————————————

整体参考:

https://www.cnblogs.com/pengdonglin137/p/5143516.html

https://blog.csdn.net/sinat_20006769/column/info/19139

转载于:https://www.cnblogs.com/chu-yi/p/10496621.html

linux-kernel-4.4 移植 (1)启动相关推荐

  1. linux 文件系统 启动,linux kernel文件系统启动部分

    现在的kernel里,有个叫做ramfs的文件系统,会把initrd(或者ramdisk,为惯性叫法)里的东西挂载到early-rootfs里(即rootfs,是ramfs的一个特殊实例),执行一些在 ...

  2. 【ARM】一步一步移植Linux Kernel 2.6.13到板子

    1环境搭建所需材料 2环境搭建所需材料之间的关系 3所使用的开发板 4译内核 1修改makefile 2拷贝配置文件 3编译得到zImage 4把zImage转成uImage 5开发板串口连接 6ub ...

  3. AT91RM9200Linux移植笔记(三)-移植Linux kernel 2.6.17

    AT91RM9200Linux移植笔记(三)-移植Linux kernel 2.6.17 手上板子原来自带的是2.4.19的内核, 打算移植新的2.6的内核,从网上下了2.6.17的kernel,下载 ...

  4. Linux Kernel系列一:开篇和Kernel启动概要

    前言 近期几个月将Linux Kernel的大概研究了一下,以下须要进行深入具体的分析.主要将以S3C2440的一块开发板为硬件实体.大概包含例如以下内容: 1 bootloader分析,以uboot ...

  5. linux启动参数怎么传给内核,如何启动内核(vivi与Linux kernel的参数传递情景分析)...

    vivi开发笔记(十七):vivi与Linux kernel的参数传递情景分析(上) 在上一部分提到过了,vivi作为bootloader,向内核传递启动参数是其本职工作之一.要把这个情景分析清楚,不 ...

  6. 4核a5中断linux,Cortex A5 MPcore寄存器TPIDRPRW复位值不为零,造成Linux Kernel不能启动的问题...

    问题现象: Cortex A5 MPcore寄存器TPIDRPRW复位值不为零,造成Linux Kernel不能启动的问题. 问题原因分析: 由于Linux Kernel内核配置使能了CONFIG_T ...

  7. 在mtk移植个linux内核,移植 Linux Kernel 造成無法開機之解決方案以及除錯工具

    一般在以下情況, 我們會進行移植 Linux Kernel 的動作. 1. 將新版 Linux Kernel 移植到全新 SoC 上 開發人員為 SoC 廠商(e.g. MTK, TI, Allwin ...

  8. Linux内核学习(七):linux kernel内核启动(一):概述篇

    Linux内核学习(七):linux kernel内核启动(一):概述篇 这一篇让我们来大致的了解一下Linux内核的启动过程 这篇文章不涉及源码,重在让你知道这个linux内核的启动过程,源码详细的 ...

  9. Linux kernel编译、安装及指定默认内核版本启动

    内容转自: https://blog.csdn.net/weixin_41666796/article/details/96434229 https://blog.mtkfan.com/post-43 ...

  10. linux kernel decompress_kernel 启动解压

    linux 解压后会跳转到,kernel执行地址: head.S中入口执行.解压之前的操作流程呢? 1. linux kernel 被uboot load到内存后的入口函数 arch/arm/boot ...

最新文章

  1. 麻省理工研究:深度图像分类器,居然还会过度解读
  2. 十年中文技术社区风雨之路 今晚4位老炮畅聊过去未来
  3. 七种Vue3传值方式
  4. php命名空间规则解析及高级功能,PHP命名空间解析规则
  5. phoenix数据类型,语法,方法
  6. 自由软件基金会庆祝成立35周年
  7. java非堆内存_java – 监视JVM的非堆内存使用情况
  8. Angular 第一章 开始
  9. Kubernetes (1.6) 中的存储类及其动态供给
  10. springboot 集成redis实现session共享
  11. ACM__搜素之BFS与DFS
  12. 2021高考河北省艺术类成绩查询,2021河北省艺术类高考专业考试成绩有关规定
  13. Zotero及部分常用插件安装和使用教程
  14. 人工智能研究中心快递柜——代码分析十一
  15. MotionEvent和TouchSlop
  16. 【新知实验室】TRTC体验
  17. 005_解密饿了么大前端团队
  18. 在国内发展,有IPMP证书有用吗?
  19. vue项目中使用阿里巴巴矢量图库图标的操作步骤
  20. Linux安装Git(一条命令即可)

热门文章

  1. Maven环境配置,IDEA配置Maven。
  2. html 对象转化数组,对象转数组.html
  3. QQ邮箱引流产品怎么推广好?QQ邮箱低成本引流技巧
  4. python post请求
  5. SQL SERVER数据库Left Join用法
  6. EXTJS-Ext.form.ComboBox下拉框默认选中某一个值(SimpleStore)
  7. CentOS 7 离线安装配置 erlang
  8. 【Unity 学习笔记】 Sprite的部分属性和功能
  9. linux查看磁盘存储情况
  10. PICT工具的安装与使用