Exynos4412——内核移植

Exynos4412 内核移植(一)—— 内核配置过程分析 一、前言 1、linux内核五大功能: 进程管理(cpu)   内存管理(内存) 设备管理(驱动) 网络管理(网络协议tcp/ip) 文件系统(vfs) 2、linux版本号: linux 2.6  2--->主版本号  6---->次版本号:奇数代表测试版本 偶数代表稳定版本 本文使用内核版本为linux3.14 3、linux目录结构: arch:体系结构 阅读详情

优快云仅用于增加百度收录权重,排版未优化,日常不维护。请访问:www.hceng.cn 查看、评论。
本博文对应地址: https://hceng.cn/2017/10/26/Exynos4412——内核移植/#more

Exynos 4412移植最新的Kernel-4.13.9。

话说最近应该不会接触AM437x了,原因有多种,但学习不能停。
手头还有买来没开过几次机的Tiny4412,本想买来学Android驱动的。
Exynos4412与S3C2240差别相对AM437x小很多,因此过渡应该会更顺滑一点。
要学习的还很多,进度有点慢,先在板子上跑起Linux再说吧。

1.设置交叉编译工具链

使用的交叉编译工具链是:arm-none-linux-gnueabi-gcc (gcc version 4.8.3 20140320)
下载好后,放在Ubuntu中,解压:

tar xjf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

记下交叉编译工具链的位置:/work/arm-2014.05/bin
修改环境变量:

sudo vim /etc/environment

添加交叉编译工具链的路径:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/work/arm-2014.05/bin"

更新环境变量:

source /etc/environment

检测:

arm-none-linux-gnueabi-gcc -v

一些关于gcc的扩充资料

2.修改、编译uboot

开始的时候使用的是Tiny4412光盘的uboot,但后续的做完了才发现不行。
原来是友善的tiny4412标准版有新旧之分,差别就是更换了不同eMMC,所以导致了有些没有更新eMMC控制器配置的uboot无法启动。
因此下了新版的uboot_tiny4412_0929.tar.gz即可。参考链接

目前首先需要实现如下功能:
用u-boot引导uImage或者zImage,
同时将设备信息以设备树的形式传递给Linux内核,
而根文件系统以ramdisk的形式传递给内核,
因为目前SD卡驱动、eMMC驱动和usb网卡驱动都没有移植。

2.1 关闭MMU

vim include/configs/tiny4412.h

将#define CONFIG_ENABLE_MMU改为#undef CONFIG_ENABLE_MMU;

2.2 修改u-boot的链接地址

vim board/samsung/tiny4412/config.mk

将CONFIG_SYS_TEXT_BASE = 0xc3e00000修改为CONFIG_SYS_TEXT_BASE = 0x43e00000;

2.3 使uboot可以引导uImage

vim common/cmd_bootm.c

①在boot_os_fn *boot_fn;后添加:

int             iszImage = 0;

②在images.legacy_hdr_valid = 1;后添加:

iszImage = 1;

③修改

images.os.os = hdr->ih_os;
images.ep = image_get_ep (&images.legacy_hdr_os_copy);

为

if(iszImage) {
    images.os.os = hdr->ih_os;
    images.ep = image_get_ep (&images.legacy_hdr_os_copy);
    }

2.4 支持设备树

vim include/configs/tiny4412.h

添加如下两个宏:

#define CONFIG_OF_LIBFDT
#define CONFIG_SYS_BOOTMAPSZ (20 << 20)

2.5 修改uboot的Makefile

将原来的:

ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE ?=
endif

改为

ifeq ($(ARCH),arm)
CROSS_COMPILE ?=/work/arm-2014.05/bin/arm-none-linux-gnueabi-
endif

2.6 编译uboot

make distclean
make tiny4412_config
make

3.移植、编译内核

3.1 下载最新内核

下载的当前最新的内核Kernel-4.13.9。

解压

xz -d linux-4.13.9.tar.xz
tar xf linux-4.13.9.tar

3.2 修改Makefile

将

ARCH            ?= $(SUBARCH)
CROSS_COMPILE   ?= $(CONFIG_CROSS_COMPILE:"%"=%)

改为

ARCH            ?= arm
CROSS_COMPILE   ?= /work/arm-2014.05/bin/arm-none-linux-gnueabi-

3.3 修改设备树文件

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

在stdout-path = &serial_0;添加启动参数:

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

将sdhci_2节点下的

status = "okay";

改为:

status = "disabled";

3.4 编译内核

Kernel-4.13.9对Exynos 4412支持还不错,直接就有配置文件,使用即可。

make distclean
make ARCH=arm exynos_defconfig
make uImage LOADADDR=0x40008000 

这里实测出现错误,显示找不到mkimage。

mkimage是/work/uboot_tiny4412_0929/tools里面的,加入环境变量即可。解决参考

sudo vim /etc/bash.bashrc

加入:

export PATH=/work/uboot_tiny4412_0929/tools:$PATH

更新:

source /etc/bash.bashrc

重新编译:

make uImage LOADADDR=0x40008000 

生成uImage在arch/arm/boot。

3.5 编译设备树文件

make dtbs
```
生成`exynos4412-tiny4412.dtb`在`arch/arm/boot/dts/`。   

# 4.下载到开发板 #
## 4.1 准备SD卡 ##
制作SD卡的工具在`uboot_tiny4412_0929`里面,
先编译下。
```
cd sd_fuse
make
```
插上SD卡,查看当前SD卡挂载位置。
```
sudo fdisk -l
```
我的是`/dev/sdb`。

## 4.2 制作SD卡,烧uboot ##
```
cd tiny4412
./sd_fusing.sh /dev/sdb 
```
制作好了,插上开发板,选择SD卡启动,在串口上即可有打印信息。


## 4.3 烧写内核、根文件系统、设备树文件 ##
这里的根文件系统用的网友做好的[ramdisk镜像](ramdisk镜像 "http://files.cnblogs.com/files/pengdonglin137/ramdisk.zip")
由于tiny4412的uboot目前还不支持usb网卡,只能使用dnw来下载,并且tiny4412的u-boot中已经自带了dnw命令了,Ubuntu上使用[网友的dnw](http://files.cnblogs.com/files/pengdonglin137/dnw.tar.gz "网友的dnw")。

①下载uImage
在u-boot里执行下载uImage的命令: 
```
dnw 0x40600000   (这个地址不唯一)
```
在Ubuntu中执行:
```
sudo ./dnw /work/linux-4.13.9/arch/arm/boot/uImage
```

②下载ramdisk
在u-boot里执行下载uImage的命令: 
```
dnw 0x41000000   (这个地址不唯一)
```
在开发机中执行:
```
sudo ./dnw /work/ramdisk/ramdisk.img
```

③下载设备树镜像
在u-boot里执行下载uImage的命令: 
```
dnw 0x42000000   (这个地址不唯一)
```
在开发机中执行:
```
sudo ./dnw /work/linux-4.13.9/arch/arm/boot/dts/exynos4412-tiny4412.dtb
```


## 4.4 启动开发板 ##
继续输入
```
bootm 0x40600000 0x41000000 0x42000000
```
不要重启,现在数据都在RAM里面的,掉电就没了。


# 5.实际效果 #
![](https://blog-image-1257972744.cos.ap-chongqing.myqcloud.com/hceng/blog_image/171026/4.png)
Exynos4412 内核移植(二)—— 内核编译过程分析 内核的编译同样是从Makefile 来分析: 一、内核源码结构 Linux内核文件数目近2万,出去其他架构CPU的相关文件,他们分别位于顶层目录下的17个子目录,各个目录功能独立,下面是常用目录: arch:体系结构相关代码 ipc:进程调度相关代码 mm:内存管理 Documentation:帮助文档 net:网络协议 lib:库 scripts:编译相关脚本工具 tools 阅读详情

相关推荐

Exynos4412 内核移植(五)—— 驱动的移植

驱动程序的动态编译和静态编译

知秋一叶 5765

Exynos4412 Linux Kernel 5.15移植过程记录(一)——解决编译内核出现mpc.h: gmp.h: No such file or director问题

Exynos4412 Linux Kernel移植过程记录(一)解决编译内核出现mpc.h: gmp.h: No such file or director问题

weixin_42408707的博客 3794

Exynos4412 Uboot 移植(四)—— Uboot引导内核过程分析

bootloader 要想启动内核,可以直接跳到内核的第一个指令处,即内核的起始地址,这样便可以完成内核的启动工作了。但是要想启动内核还需要满足一些条件,如下所示: 1、cpu 寄存器设置     * R0 = 0     * R1 = 机器类型 id     * R2 = 启动参数在内存中的起始地址 2、cpu 模式     * 禁止所有中断     * 必须为SVC(超级用户

知秋一叶 6690

Exynos4412开发板Linux系统移植步骤

1.u-boot移植 2.FALSH移植 3.网卡驱动移植 4.内核编译步骤 5.SD卡u-boot启动盘制作 6.根文件系统移植 将制作好的系统通过nfs服务挂载到开发板测试,通过tftp下载到开发板

weixin_59613755的博客 1648

Exynos4412 内核移植(六)—— 设备树解析

一、描述         ARM Device Tree起源于OpenFirmware (OF),在过去的Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾,如板上的platform设备、resource、i2c_board_info、spi_board_info以及

知秋一叶 1万+

Exynos4412 移植Linux Kernel 5.15过程记录(二)——解决U-Boot启动内核卡在Starting kernel的问题,DM9000网卡驱动(设备树)

Exynos4412 Linux Kernel移植过程记录(二) 解决U-Boot启动内核,卡在Starting kernel的问题 DM9000网卡驱动(设备树)

weixin_42408707的博客 8294

Mac M1下iTop4412编译环境

1、虚拟机安装VM,Parallels Desktop都可以,个人建议PD17功能齐全用的也比较稳定舒服。网上淘个企业版激活码也就够用了。(笔者PD17,所以以下环境是PD17上搭建的) 2、添加虚拟机 两种方法自己下载镜像或者直接点下方Ubuntu,或者Debian均可以,两个系统使用起来都差别不大。 创建完系统,更换系统源,下面一条指令解决。 cd /etc/apt && mv sources.list sources.list.bk && echo -e

zhang857708843的博客 497

从设备树到驱动:Exynos4412移植Linux 5.15内核的避坑全记录(含U-Boot机器码对齐秘籍)

本文详细记录了在Exynos4412平台上移植Linux 5.15内核的完整流程与关键技巧。核心内容包括U-Boot机器码与内核的精确对齐、设备树(Device Tree)的深度配置与驱动适配,并提供了DM9000网卡等外设的实战配置方案,旨在帮助开发者系统性地规避移植过程中的常见陷阱,实现从引导到驱动的稳定启动。

weixin_29185199的博客 205

Linux内核移植 part3:Exynos4412 Linux Kernel移植

本文介绍如何给Exynos 4412 SoC移植Linux内核,所有过程亲自实践,真实有效。 代码类型 版本说明 内核 Linux Kernel 4.1.36 硬件 iTop4412 SCP 精英板 uboot 2015.04 busybox 1.26.1 第一部分:代码的使用过程介绍1.1 使用uboot参考http://blog.youkuaiyun.com/abcam

叶玄青的博客 6803

Exynos4412 内核移植(三)—— 内核启动过程分析

start_kernel() |----printk(linux_baner)  // 打印内核版本信息 |----setup_arch(comxxxx)   //初始化mem_io |----paging_init() |---setup_machine |---lookup_machine_type(汇编)  //机器号对应平台  |---paging_init |---devi

知秋一叶 6386

Exynos4412 内核移植(四)—— MMU 相关知识解析

一、MMU的产生       许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成许多

知秋一叶 4966

Exynos4412 内核移植(七)—— 内核相关知识补充

一、内核调试方法简单分析 1、addr2line: 解决oops错误 a -- oops消息 oops(也称 panic),称程序运行崩溃,程序崩溃后会产生oops消息。应用程序或内核线程的崩溃都会产生oops消息,通常发生oops时,系统不会发生死机,而在终端或日志中打印oops信息。

知秋一叶 2592

《Linux操作系统-系统移植》第4章 内核移植 (Exynos4412+Linux3.14)

4.6内核的配置和编译 【Linux内核下载地址】 1、 解压内核 将linux-3.14.tar.xz拷贝到/home/linux下并解压 $tar xvf linux-3.14.tar.xz $ cd linux-3.14 2、 修改内核顶层目录下的Makefile $ vim Makefile 修改: 为: ARCH ?= arm...

不问归期的博客 4322

Exynos4412 内核移植—— 驱动的移植

转载地址:https://blog.youkuaiyun.com/zqixiao_09/article/details/50822746以移植自己制作的驱动,学习内核移植中的驱动移植,及 驱动程序的动态编译和静态编译硬件环境:Linux 内核版本:Linux 3.14主机:Ubuntu 12.04发行版目标机:FS4412平台交叉编译工具:arm-none-linux-gnueabi-gcc一、静态编译1、添...

朝辞暮见的博客 1119

Exynos4412 移植Linux-6.1(九)移植tiny4412_backlight驱动的过程及问题解决

LCD本身是不发光的,需要移植背光源(Backlight)驱动。 在原tiny4412_backlight驱动是针对linu-4。在移植到Linux-6.1的过程中,碰到了无法获取irq资源、irq地址为NULL等问题。本文记录了移植及问题解决过程。

weixin_42408707的博客 1619

新手也能玩转!用Panosim+MATLAB/Simulink搭建你的第一个智能驾驶仿真场景(保姆级图文)

本文为新手提供了使用Panosim和MATLAB/Simulink搭建智能驾驶仿真场景的详细教程。从环境准备、基础场景创建到仿真模型构建,一步步指导用户完成第一个智能驾驶仿真项目,帮助零基础用户快速上手并体验智能驾驶仿真的乐趣。

weixin_29090089的博客 179

Exynos4412 内核移植—— 内核的配置和编译

•        解压内核将linux-3.14.tar.xz拷贝到/home/linux下并解压$tar  xvf linux-3.14.tar.xz$ cd  linux-3.14•       修改内核顶层目录下的Makefile$ vim Makefile修改:ARCH               ?= $(SUBARCH)CROSS_COMPILE ?= $(CONFIG_CROSS_C...

朝辞暮见的博客 1579

时序异常检测汇总

时序异常检测

Mark_Australia的博客 1万+

移植linux4.14内核到四核Exynos4412开发板

最近法师收到了很多留言,其中有一部分问法师什么时候更新,还有一大部分问法师我是买迅为的IMX6UL精英版好呢还是买4412精英版好呢,因为我们这俩个都不贵。法师的建议的是入手4412!为什么呢? 第一,4412是三星第一款经典处理器,为三星创造了辉煌,是当年在国内红得发紫的GalaxyS3手机的主控,他的出现,开启了手机和平板的四核时代,让手机和平板变得流畅,可以说,到目前为止,4...

mucheni的博客 1281

未隔离电源设备使用usb转串口调试导致串口模块爆炸烧坏事故记录

这个事就发生在前两天,我们公司的wifi模块被客户用到了咖啡机上,客户寄了一台整机给我们协助调试,还送了几包咖啡豆,本想着还能打个咖啡喝一喝的,但就在咖啡机刚寄过来第一天,就出事了。而这个事故的发生,竟然仅仅是因为同事接了个串口模块到电脑调试打印导致的。谁也想不到,这个3.3V的供电的wifi模块居然还有这么大的威力。直接将usb转TTL串口模块的转换芯片给爆开了,咖啡机也给弄坏了,据同事描述当时情况就只见到一片火光和一声巨响,状况比较惨烈,所幸的是笔记本电脑没有烧坏,但是直接给崩蓝屏了。 ...

fangye945a的博客 6188

YOLOv8_obb的C++工程部署实战:从模型转换到实时视频推理

本文详细介绍了YOLOv8_obb模型在C++环境下的完整工程部署流程,涵盖从PyTorch模型到ONNX格式的转换、基于ONNX Runtime的C++推理引擎搭建、旋转框后处理解析,以及实时视频流处理与性能优化。文章重点解析了模型转换的关键参数、环境配置的常见问题、核心推理代码的实现,并提供了实用的避坑指南,旨在帮助开发者高效完成YOLOv8_obb的C++工程部署。

weixin_29100927的博客 44

GCC编译器 - linux3.5内核在 Exynos4412上移植,更换gcc编译器遇到无法正常运行的问题记录(已解决)

GCC编译器 - linux3.5内核在 Exynos4412上移植,更换gcc编译器遇到无法正常运行的问题记录(已解决)

修车轱辘的博客 475

手把手教你学simulink实例--基于Simulink的船舶动力装置性能评估与仿真

船舶动力装置是船舶运行的核心系统,其性能直接影响船舶的安全性、经济性和环保性。基于MATLAB/Simulink平台进行船舶动力装置性能评估与仿真是研究和优化船舶动力系统的重要手段。通过建模与仿真,可以分析动力装置在不同工况下的性能表现,并验证控制策略的有效性。本项目旨在构建一个完整的船舶动力装置性能评估与仿真模型,包括发动机建模、传动系统建模、负载分析以及性能评估模块,并通过仿真分析其动态响应和性能指标。

MHD0815的博客 971
上一篇: QT应用设计——HexoBlogClient
下一篇: Exynos4412——网卡移植和NFS启动
hceng_blog
博客等级 码龄10年 263粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值