mini2440 u-boot linux 内核启动,移植较新(Linux3.19)内核至mini2440开发板(一)

发布者:tyloo820最新更新时间:2022-06-24 来源: eefocus关键字:mini2440  u-boot  linux  内核启动 手机看文章 扫描二维码
随时随地手机看文章

s3c24xx-nand s3c2440-nand: Tacls=1, 9ns Twrph0=3 29ns, Twrph1=2 19ns

s3c24xx-nand s3c2440-nand: NAND soft ECC

nand: device found, Manufacturer ID: 0xec, Chip ID: 0xda

nand: Samsung NAND 256MiB 3,3V 8-bit

nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64

Creating 5 MTD partitions on "nand":

0x000000000000-0x000000040000 : "supervivi"

__nand_correct_data: uncorrectable ECC error

0x000000040000-0x000000060000 : "param"

ftl_cs: FTL header not found.

0x000000060000-0x000000560000 : "Kernel"

ftl_cs: FTL header not found.

0x000000560000-0x000040560000 : "root"

mtd: partition "root" extends beyond the end of device "nand" -- size truncated to 0xfaa0000

ftl_cs: FTL header not found.

0x000000000000-0x000040000000 : "nand"

mtd: partition "nand" extends beyond the end of device "nand" -- size truncated to 0x10000000

__nand_correct_data: uncorrectable ECC error

发现开发板已经可以识别nand flash的信息,但是打印出如下信息:

ftl_cs: FTL header not found.

解决方法如下:在内核根目录下执行make menuconfig,进入

Device Drivers ->

Memory Technology Devices (MTD) ->

去掉如下选项

<>FTL (Flash Translation Layer) support

<> NFTL (NAND Flash Translation Layer) support

<>INFTL (Inverse NAND Flash Translation Layer) support

保存后重新编译即可。

1.6到目前为止已经完成了对nand flash的支持,但是因为缺少根文件系统,内核依旧无法正常启动。接下去我们将为内核添加对yaffs2的支持。

在终端下执行#git clone git://www.aleph1.co.uk/yaffs2 获取最新的yaffs2源码。同步完后,进入yaffs2目录,执行# ./patch-ker.sh c m 内核源码路径,既可对内核打上yaffs2的补丁。进入内核目录,执行make menuconfig

选择File systems  --->

[*] Miscellaneous filesystems  --->

│       yaffs2 file system support

保存后退出,重新编译,此时会遇到几个错误,因为新版的Linux内核有一些对文件操作的函数进行了修改,我们需要按照错误逐一进行修改。按照错误:

fs/yaffs2/yaffs_vfs.c: In function 'yaffs_readpage_nolock':

fs/yaffs2/yaffs_vfs.c:286: error: 'struct file' has no member named 'f_dentry'

fs/yaffs2/yaffs_vfs.c: In function 'yaffs_hold_space':

fs/yaffs2/yaffs_vfs.c:484: error: 'struct file' has no member named 'f_dentry'

fs/yaffs2/yaffs_vfs.c: In function 'yaffs_release_space':

fs/yaffs2/yaffs_vfs.c:502: error: 'struct file' has no member named 'f_dentry'

fs/yaffs2/yaffs_vfs.c: In function 'yaffs_file_write':

fs/yaffs2/yaffs_vfs.c:594: error: 'struct file' has no member named 'f_dentry'

fs/yaffs2/yaffs_vfs.c:606: error: 'struct file' has no member named 'f_dentry'

fs/yaffs2/yaffs_vfs.c: In function 'yaffs_file_flush':

fs/yaffs2/yaffs_vfs.c:730: error: 'struct file' has no member named 'f_dentry'

fs/yaffs2/yaffs_vfs.c:741: error: too few arguments to function 'yaffs_flush_file'

fs/yaffs2/yaffs_vfs.c: In function 'yaffs_sync_object':

fs/yaffs2/yaffs_vfs.c:771: error: too few arguments to function 'yaffs_flush_file'

fs/yaffs2/yaffs_vfs.c: At top level:

fs/yaffs2/yaffs_vfs.c:781: error: 'generic_file_aio_read' undeclared here (not in a function)

fs/yaffs2/yaffs_vfs.c:782: error: 'generic_file_aio_write' undeclared here (not in a function)

fs/yaffs2/yaffs_vfs.c:787: error: 'generic_file_splice_write' undeclared here (not in a function)

fs/yaffs2/yaffs_vfs.c: In function 'yaffs_iterate':

fs/yaffs2/yaffs_vfs.c:1719: error: 'struct file' has no member named 'f_dentry'

fs/yaffs2/yaffs_vfs.c: In function 'yaffs_flush_inodes':

fs/yaffs2/yaffs_vfs.c:2190: error: too few arguments to function 'yaffs_flush_file'

fs/yaffs2/yaffs_vfs.c: In function 'yaffs_flush_super':

fs/yaffs2/yaffs_vfs.c:2203: error: too few arguments to function 'yaffs_flush_whole_cache'

打开/fs/yaffs2/yaffs_vfs.c,使用替换功能,将代码中的所有f_dentry均替换为f_path.dentry,将所有的yaffs_flush_file(obj, 1, 0);替换为yaffs_flush_file(obj, 1, 0,1);将yaffs_flush_file(obj, 1, datasync);替换为yaffs_flush_file(obj, 1, datasync,1);将yaffs_flush_file(obj, 1, 0);替换为yaffs_flush_file(obj, 1, 0,1);yaffs_flush_whole_cache(dev);替换为yaffs_flush_whole_cache(dev,1);

718行附近

-.read = do_sync_read,

-.write = do_sync_write,

+.read = new_sync_read,

+.write = new_sync_write,

-.aio_read = generic_file_aio_read,

-.aio_write = generic_file_aio_write,

+       .read_iter =generic_file_read_iter,

+       .write_iter =generic_file_write_iter,

-.splice_write = generic_file_splice_write,

+.splice_write = iter_file_splice_write,

保存后重新编译,下载内核至开发板,同时烧录文件系统(为了测试方便,这次我先使用友善提供的制作好的文件系统root_qtopia.img在以后的教程中我们也会制作自己的文件系统),重启开发板,看到如下引导信息

Starting kernel ...

Booting Linux on physical CPU 0x0

Linux version 3.19.3 (root@ginger-virtual-machine) (gcc version 4.4.3 (ctng-1.6.1) ) #6 Sat Apr 25 13:37:14 CST 2015


关键字:mini2440  u-boot  linux  内核启动 引用地址:mini2440 u-boot linux 内核启动,移植较新(Linux3.19)内核至mini2440开发板(一)

上一篇:mini2440 u-boot linux 内核启动,u-boot.2012.10——mini2440(二、启动流程分析)
下一篇:uboot-2012.04.01移植到mini2440(一)启动流程、内存分布及重定位初步分析

推荐阅读最新更新时间:2024-10-29 11:15

armv8(aarch64)linux内核中flush_dcache_all函数详细分析
/* * __flush_dcache_all() * Flush the wholeD-cache. * Corrupted registers: x0-x7, x9-x11 */ ENTRY(__flush_dcache_all) //保证之前的访存指令的顺序 dsb sy //读cache level id register mrs x0, clidr_el1 // read clidr //取bits (Level of Coherency for the cache hierarchy.) //需要遵循cache一致性的ca
[单片机]
armv8(aarch64)<font color='red'>linux</font><font color='red'>内核</font>中flush_dcache_all函数详细分析
OK6410A 开发板 (八) 53 linux-5.11 OK6410A mmap的实例 基于 fb
按照 初始化顺序 1. 内核 fb core 侧 2. 内核驱动侧(此时fb_mmap没跑) 3. 应用侧(应用侧运行的时候fb_mmap开始跑) 内核 fb core 侧 drivers/video/fbdev/core/fbmem.c static const struct file_operations fb_fops = { .mmap = fb_mmap, } fbmem_init register_chrdev(FB_MAJOR, fb , &fb_fops); fb_mmap // start:51600000,len:7f800 vm_i
[单片机]
达芬奇数字媒体片上系统的架构和Linux启动过程
达芬奇(DaVinci)数字媒体技术平台TMS320DM6446/3采用了ARM+DSP双核的架构,本文从芯片的硬件结构入手介绍达芬奇DMSoC硬件部分及Linux OS的启动过程。 达芬奇DMSoC硬件概述 如图1所示,达芬奇数字媒体片上系统(DMSoC)提供:两个内核(ARM+DSP);视频处理子系统(VPSS);多种Boot模式(NOR Flash/NAND Flash/UART0 Boot Mode);两个电源域;多个时钟树;多个引脚独立或复用的外设。 图1 DM6446功能结构框图。 ARM-DSP集成 对于双核的达芬奇架构,大家最关心的就是两个核
[单片机]
达芬奇数字媒体片上系统的架构和<font color='red'>Linux</font><font color='red'>启动</font>过程
Linux操作系统的嵌入式领域面临新挑战
与在服务器和桌面系统的风风火火比较起来,Linux在嵌入式领域似乎总是不温不火,是生不逢时,还是另有隐情? 最近几年,Linux操作系统在桌面和服务器系统等领域的应用取得了很大的成功。它的存在已经对这些领域中的传统霸主,例如微软的Windows和Sun公司的SunOS/Solaris操作系统等造成了极大的威胁。这主要得益于其较低的使用开销和更高的应用性能:现在,Linux操作系统加高端奔腾处理器构成的计算机系统在性能上已经远远超过了同等价位的运行着Solaris的基于SPARC处理器的计算机系统;Linux能够取得成功的另一个主要原因在于它是一个开放源码的系统软件,Linux用户可以享受到世界各地Linux爱好者提供的支持。
[工业控制]
<font color='red'>Linux</font>操作系统的嵌入式领域面临新挑战
Debian 13“Trixie”Linux 发行版有望将带来 RISC-V 64 位支持
6 月 12 日消息,Debian 是最为古老的 GNU / Linux 发行版之一,该操作系统以稳定性为重,不追求高速迭代,因此在新版本发布很早以前,就会揭晓一系列新特性。目前 Debian 项目宣布,在未来的 Debian 13 “Trixie” 中,将带来 RISC-V 64 位支持。 日前 Debian 发布团队分享的更新邮件中,Debian 开发人员 Jonathan Wiltshire 透露了 RISC-V 架构下 Debian 的现状:“虽然 RISC-V 64 位移植在此前取得了良好进展,但最终还是并未实装到 Debian 12 中。未来该特性有望在 Debian 13 中进一步完善,之后提供官方 RISC-V
[嵌入式]
Debian 13“Trixie”<font color='red'>Linux</font> 发行版有望将带来 RISC-V 64 位支持
嵌入式Linux系统小型化技术
作者Email: zhh@httc.cn 介绍了Linux在嵌入式领域中的应用和宿主机、目标机开发模式,详细地给出了精简内核的实现过程。分析了glibc系统库和ELF文件格式的结构和其中的共享库裁剪技术的原理,提出并实现了一种库裁剪方案。 关键词 嵌入式;Linux;小型化 一、 概述 嵌入式Linux一般是指对标准Linux发行版本进行小型化裁剪处理之后,适合于特定嵌入式应用场合的专用Linux操作系统。嵌入式系统通常是资源受限的系统,无论是处理器计算能力还是RAM或其他存储器容量都比较“小”。因此,如何创建一个小型化的Linux作为操作系统开发成为首先需要考虑的问题。嵌入式Linux系统中普遍采用三层结构
[嵌入式]
云到来 Windows服务器也遭遇市场缩水
不久之前,服务器在企业中用于提供各种后勤服务,比如电子邮件、文件存储、数据库等等。Novell公司开始办公自动化——在1990年代中期划入Windows,统治着一般中小型企业数据中心。自那时以来世界已经发生了变化,微软现在正试图恢复市场份额。 过去十年里很多服务都搬到云中。数据中心规模大幅减少,那些以前用于办公的服务器现在由云供应商提供。Windows服务器也因此一度遭遇市场缩水。 传统的Windows服务器安装基数变得越来越小,而Linux已作为领先的操作系统提供托管在云环境中的服务。Windows服务器不得不扮演新的角色,因此Windows Server 2012 R2提供了重要的改进,试图在新的IT市场中为W
[网络通信]
linux UART串口驱动开发文档
一. Linux的串口接口及层次. 串口是使用已经非常广的设备了, 因此在linux下面的支持已经很完善了, 具有统一的编程接口, 驱动开发者所要完整的工作就是针对不同的串口IC来做完成相应的配置宏, 这此配置宏包括读与写, 中断打开与关闭(如传送与接收中断), 接收状态处理, 有FIFO时还要处理FIFO的状态. 如下我们就首先切入这一部分, 具体了解一下与硬件串口IC相关的部分在驱动中的处理, 这一部分可以说是串口驱动中的最基础部分, 直接与硬件打交道, 完成最底层具体的串口数据传输. 1. 串口硬件资源的处理. W83697及W83977在ep93xx板子上的映射的硬件物理空间如下: W83697: 0x200000
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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