向tiny6410中移植中移植linux-4.5.1内核(最新)
下载linux-4.5.1.tar.gz
解压在任意目录下。我解压在/home/tiny6410/
# tar xvzf linux-4.5.1.tar.gz
# cd linux-4.5.1/
修改Makefile文件 在第251和252行上 改成自己的交叉编译器
251 ARCH ?= arm
252 CROSS_COMPILE ?= arm-linux-
在linux源码文件中有一个三星Demo板的默认配置
这里我们的配置文件就先用这个 arch/arm/configs/s3c6400_defconfig 并make
# make s3c6400_defconfig
# make
注:在执行make语句后会报错
arm-linux-ld: ERROR: Source object virt/built-in.o has EABI version 0, but target .tmp_vmlinux1 has...
是EABI版本的问题
我解决的方法是更换了交叉编译器
# sudo apt-get install gcc-arm-linux-gnueabi
修改Makefile文件
251 ARCH ?= arm
252 CROSS_COMPILE ?= arm-linux-gnueabi-
之后make就正常了
命令行输入:
# make zImage
将uImage放到tftp服务器目录下,启动开发板,你将会看到内核启动的提示信息
在通过串口看到传回来的信息后,心里很高兴。不过系统并没有启动成功,因为上面并没有文件系统
这里我的开发板上tiny6410,故这里用linux内核中的mini6410的相关文件进行修改。
首先修改资源代码,进入arch/arm/mach-s3c64xx/目录
在这里我们使用mini6410的资源配置文件,首先复制一份mach-mini6410.c为mach-tiny6410.c。
修改mach-tiny6410.c
# cd arch/arm/mach-s3c64xx
# cp mach-mini6410.c mach-tiny6410.c
# vim mach-tiny6410.c
把文件中所有mini6410改为tiny6410
:%s/mini6410/tiny6410/g
:%s/MINI6410/TINY6410/g
在346行左右MACHINE_START(MINI6410,”MINI6410”)不改 就可以不改硬件码
修改struct mtd_partition结构体内容,此结构体用于保存nandflash分区信息(这些设置与Bootloader有关,不能任意设置)
static struct mtd_partition tiny6410_nand_part[] = {
{
.name = "Bootloader",
.offset = 0,
.size = (4 * 128 *SZ_1K),
.mask_flags = MTD_CAP_NANDFLASH,
},
{
.name = "Kernel",
.offset = (4 * 128 *SZ_1K),
.size = (5*SZ_1M) ,
.mask_flags = MTD_CAP_NANDFLASH,
},
{
.name = "File System",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
}
};
这里有个bug我们需要屏蔽掉
进入driver/mtd/nand/目录,打开nand_base.c文件,找到3265行附近的
Case 128:
Chip->ecc.layout = &nand_oob_128;
Break;
在此行下添加
Case 436:
Chip->ecc.layout = &nand_oob_128;
Break;
之后我们需要关闭ECC校验
进入driver/mtd/nand/目录,修改s3c2410.c文件
找到chip->ecc.mode = NAND_ECC_SOFT
改为chip->ecc.mode = NAND_ECC_NONE;
然后我们需要增加devfs文件管理器的支持,修改fs/Kconfig,找到menu "Pseudo filesystems"
在之后添加
config DEVFS_FS
bool "/dev file system support (OBSOLETE)"
default y
config DEVFS_MOUNT
bool "Automatically mount at boot"
default y
depends on DEVFS_FS
修改arch/arm/mach-s3c64xx/Kconfig文件
找到config MACH_SMDK6410
Cp一整段MACH_SMDK6410
把新的MACH_SMDK6410改为MACH_TINY6410 下一行的SMDK6410也改成TINY6410
修改arch/arm/mach-s3c64xx/Makefile文件
添加一行obj-$(CONFIG_MACH_TINY6410) +=mach-tiny6410.o
在源代码根目录中执行make menuconfig
(我只列出必选项,必须禁止选项会特殊说明,一般我们只增不减)
进入System type --->
ARM system type(Samsung S3C64XX) //这项一定要正确
………………
*** System MMU ***
[*]TINY6410 //在System MMU中选择tiny6410
进入Device Drivers --->
<*>Memory Technology Device (MTD) support --->
………………
<*> Caching block device access to MTD devices
………………
<*> NAND Device Support --->
<*> NAND Flash support for Samsung S3C SoCs
进入与 <*>Memory Technology Device (MTD) support ---> 同一等级列表的Block devices 选上<*> RAM block device support
退回到主界面,进入File systems,在这里自己选择需要的文件系统,
进入File systems的 Pseudo filesystems--->
选上 [*] /dev file system support(OBSOLETE)
[*] Automatically mount at boot
(这两项即为之前我们添加的devfs 文件管理器支持)
回到主界面,进入Boot options,里面有一行是需要我们自己手动填写的,是linux启动参数,在这里我初略说一下
Noinitrd
不使用临时的根文件系统
该参数告诉内核启动时使用哪个设备作为根文件系统。比如第3分区作为根文件系统:root=/dev/mtdblock2
Rootfstype=…
根文件系统类型(比如rootfstype=cramfs)
Ro/rw
ro以只读方式加载根文件系统,rw以读写方式加载(rw为默认值)
Init=..
初始化进程名(使用busybox制作的根文件系统这一项一般为init=/linuxrc)
Console=…
字面意思:控制台,就是控制台信息输出到哪,这里TINY6410填ttySAC0,115200
我的启动参数为root=/dev/mtdblock2 console=ttySAC0,115200 lcd=S70D
设置完毕,保存信息,编译内核吧.
向tiny6410中移植中移植linux-4.5.1内核(最新)的更多相关文章
- 将Socket应用程序从Unix向Windows移植中应注意的几点问题
套接字(socket)当今已成为最流行的网络通信应用程序接口.套接字最初是由加利福尼亚大学Berkeley分校为Unix操作系统开发的网络通信接口,后来它又被移植到DOS与Windows系统,特别是近 ...
- linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,日本再战!)
linux 3.4.103 内核移植到 S3C6410 开发板 这个星期差点儿就搭在这里面了,一開始感觉非常不值得,移植这样的浪费时间的事情.想立刻搞定,然后安安静静看书 & coding. ...
- 如何在CentOS 5.x 中安装Windows Azure Linux Agent (WALA)
Qing Liu Tue, Mar 10 2015 3:06 AM 在今天的这一个章节中,我们主要讨论在CentOs 5.x 中如何安装Windows Azure Linux Agent 2.11 ...
- JAVA中调用LevelDB用于Linux和Window环境下快速存储KV结构
一.简介 JAVA中调用LevelDB用于Linux和Window环境下快速存储KV结构 二.依赖 <!-- https://mvnrepository.com/artifact/org.fus ...
- 开发中常遇到的linux系统配置操作整理
一直以来,工作中使用xshell连接linux虚拟机.常常需要在虚拟机中搭建一个新的Linux系统,为了满足操作需要,必不可少的是一系列配置.之前对这些指令都是记录在云笔记,但是零零散散,每次用时,都 ...
- Windows中的JDK和Linux中的JDK是否相同
前言 在面试中,被问到了一个问题: Windows中的JDK和Linux中的JDK是否相同? 其实,以上这个问题是一个子问题.原本的问题是:如何理解Java的跨平台机制.由于原问题显得有些宽泛,因此延 ...
- 裸板中中断异常处理,linux中断异常处理 ,linux系统中断处理的API,中断处理函数的要求,内核中登记底半部的方式
1.linux系统中的中断处理 1.0裸板中中断异常是如何处理的? 以s5p6818+按键为例 1)按键中断的触发 中断源级配置 管脚功 ...
- [好好学习]在VMware中安装Oracle Enterprise Linux (v5.7) - (5/5)
- [好好学习]在VMware中安装Oracle Enterprise Linux (v5.7) - (4/5)
随机推荐
- Could not load file or assembly 'Microsoft.SqlServer.Management.Sdk.Sfc, Version=11.0.0.0 系统找不到指定的文件。
环境: web服务器: ip:192.168.1.32 ,安装有 Visual Studio Premium 2013 操作系统: Microsoft Server 2008 r2+sp1 数据库服 ...
- sharepoint custom web service
创建自定义 ASP.NET Web 服务 http://msdn.microsoft.com/zh-cn/library/ms464040.aspx
- Linux学习心得之 jnlp的文件和java应用程序安全设置
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 jnlp的文件和java应用程序安全设置 1.前言2. jnlp的文件打开3.java应用程 ...
- 对Xcode菜单选项的详细探索(干货)
本文调研Xcode的版本是 7.1,基本是探索了菜单的每一个按钮.虽然从xcode4一直用到了xcode7,但是一般都只是用了一些基础的功能,说来也惭愧.在一次偶然的机遇突然发现了“显示调用层级”的选 ...
- Java中的内部类(成员内部类、静态内部类、局部内部类、匿名内部类)
Java中的内部类(成员内部类.静态内部类.局部内部类.匿名内部类) 神话丿小王子的博客主页 我们先看这样一段话:人是由大脑.肢体.器官等身体结果组成.而组成我们人体的心脏它也有自己的属性和行为(血液 ...
- zend studio 8 修字体和大小
第一步:进入设置窗口 windows -> preferences 第二步:进入修改字体的选项卡. General -> Appearance -> Colors and ...
- yii2 如何在页面底部加载css和js
作者:白狼 出处:www.manks.top/article/yii2_load_js_css_in_end 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接 ...
- Jmeter教程索引贴
新的一年即将到来,不知不觉2015年自己在Jmeter方面总结的文章有十几篇,在此汇总一下,顺便也算是个总结吧.2016年,继续学习技术,总结,写文章. 一.基础部分: 使用Jmeter进行http接 ...
- Chrome浏览器二维码生成插件
猛击就可以使用啦->>>猛击使用 源码如下: 源码打包 源码: jquery-2.1.3.min.js jquery.qrcode.min.js https://gith ...
- CSRF攻击与防御
CSRF是什么 CSRF在百度百科中是这么说的:“CSRF(Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session ridin ...