ARM Linux 的XIP还是挺好用的

article/2025/10/14 1:13:40

    MergeFile下载(微软SkyDrive):http://cid-a0a942ebd8c6c3b5.office.live.com/self.aspx/.Documents/MergeFiles.rar

     一般来说,现在的ARM Linux嵌入式系统都是将Image拷贝到SDRAM中进行运行的标准方式,尤其是像S3C6410和S3C2410这些支持NAND Flash的处理器,一般硬件设计直接把NOR Flash都省了,更是必须在SDRAM中运行。

      可是存在就是合理的,XIP作为一项古老的技术,还是有一定的用处的,比如可以减少开机等待时间,也可能可以增加电池寿命,当然这个都是有条件的,在Intel的《creating  optimized XIP systems》elinux.org/upload/d/dd/CELF-XIP_Linux.pdf 这个pdf上有详细的介绍。

      不过在我这个EVB板子上,最现实的原因就是RAM太少了,总共只有8M,而我编译的内核就有2.5M左右,加上系统运行驻留的Init等进程已经动态库,内存所剩无几。

      打开XIP还是很简单的,Linux 2.6.32.15在这上面做的还是相当好的,只需要打开内核编译的XIP选项,填入内核在NOR Flash中的地址即可,比如我的0x80000,编译以后就会在arch/arm/boot下面生成一个叫xipImage的文件,将这个文件烧录到Flash中的对应位置就OK了。

      在我的系统中,由于要使用现有的EVB的bootloader,并且只烧录在CP段,因此就必须自己做一个bootloader来引导Linux,系统启动时先运行EVB自己的bootloader,然后跳到这个Linux Bootloader,copy文件系统(目前是RAMDISK),设置TAG,命令行,启动的寄存器等,跳到Flash中相应位置开跑。

      为了将Linux bootloader, xipImage和RAMDISK整到一个Image中以便使用ETS烧写,在Cygwin下面写了一个小程序mergefile来完成合并的工作。mergefile使用一个配置文件进行配置,配置文件类似于Windows的.ini 文件,

     [OUTPUT]
     #The number of file to be merged.Example, if FileCount=10 you should have sections INPUT0....INPUT10
     FileCount=3
     FileName=cp.rom
     #total size is 10M bytes.
     TotalSize=10485760
     [INPUT0]
     FileName=lboot.rom
     BaseAddress=0
     [INPUT1]
     FileName=xipImage
     BaseAddress=0x40000
     [INPUT2]
     FileName=mmufs.cramfs
     BaseAddress=0x3C0000

     其中OUTPUT段是控制输出的,FileCount表示要合并的文件数量,比如例子中是3,就对应3个Input段,然后是输出文件名和总的大小。后面输入段包括每段的文件名和在输出文件中的基址。

     解析这个配置文件使用的是MiniGUI里面的读取MiniGUI.cfg的函数GetIntValueFromEtcFile和GetValueFromEtcFile及其子函数。想想也是蛮有意思的,2003年第一次接触MiniGUI的时候就把这两个函数移植来读取我们的工控设备的配置参数,7年过去了,再次用起了这两个函数。不过那当时的Feyman还在创始人魏永明先生的家里上班,而且还只支持带MMU的Linux,现在都做了这么多年了,还做得不错,绝大部分操作系统都支持。因此坚持并精益求精的做一件事是多么的重要!

      mergefile的处理过程是:先读取配置文件,知道了输入和输出的信息,开一个输出文件大小的outputbuffer(比如10M),然后把输入文件通过mmap都map到内存中,用memcpy拷贝到outputbuffer中对应的基址开始的位置上,所有输入文件都拷贝完毕后,把outputbuffer写到输出文件即可。这样做的目的,一方面是输出文件大小不会太大,现在计算机内存都1G以上,所以开个大buffer也无所谓了,而且mmap把文件映射成内存后,都是内存操作,代码写起来相当的快捷。

      由于MiniGui的配置参数是以Linux的标准0x0A结束行的,而Windows上是以0x0D0A结束的,因此MiniGUI那两个函数的底层还要修改一下,以便同时支持在Linux和Windows上修改配置文件。


http://chatgpt.dhexx.cn/article/MlksE3h7.shtml

相关文章

macOS Mojave 解压xip失败的问题

写这个博客主要是记录最近更新 macOS 10.14 和升级了Xcode10后要重新下载一个旧版的Xcode所踩的坑。 1、首先要打开通用的任何来源这个选项: 发现提示“xxxxxx 已损坏,打不开。” (很多破解版的软件安装不成功就是这个问题) 是因为macOS Sier…

ESP32系列--存储器类型和XIP特性

一、目的 当我们通过ESP-IDF开发ESP32时,可能会遇到类似这样的场景需要对某个函数的执行速度进行优化例如中断执行函数需要快入快出,那么应该怎么做呢,ESP-IDF里面有没有提供这样的方法或者机制呢? 按照常识我们总认为内部SRAM的读…

Raspberry Pi Pico SDK开发-Flash-XIP

Flash-XIP RP2040 由 Raspberry Pi 设计,具有双核 Arm Cortex-M0+ 处理器和 264KB 内部 RAM,并支持高达 16MB 的片外闪存。 广泛的灵活 I/O 选项包括 I2C、SPI 和独特的可编程 I/O (PIO)。 本实例将演示如何使用Flash。 1、Flash-XIP介绍 RP2040使用就地执行 (execute-in-…

Nor Flash芯片内执行(XIP)

前言:这个所谓的芯片内执行(XIP)对于我这种一根筋的人是很难理解的,一直总觉得CPU是只能在RAM中运行程序,为毛能够在Nor Flash中执行程序呢,这里面就有个概念容易混淆,也可能是翻译理解的问题。…

芯片的XIP与BootRom启动方式

XIP:execute in place,就地执行,即芯片内执行,指应用程序可以直接在flash闪存中取指然后译码、执行,不必再把代码读到系统RAM中,flash内执行时指Nor flash不需要初始化,可以直接在flash内执行代…

STM32CubeIDE XiP 和 BootROM介绍, XiP外部内存QSPI FLASH执行用户代码

随言: 目前的电子产品功能越来越多,随之而来的就是代码越来越庞大,代码所需要的存放空间也越来越大。 比如:用ST做GUI界面,面临最大的问题就是芯片内部flash最大才2M。在现在这个时代,2M其实也放不了几张…

mac实用小技巧之解压.xip文件

Mac下解压(.xip)文件 在安装Xcode的时候,我从官网下载了一个Xcode的安装文件,但是这个文件是(.xip)压缩文件,我使用了很多解压软件,都没有解压成功,最后上网查看,大家推荐了一种方法 “通用”里有时没有“…

XIP技术介绍

转载:https://blog.csdn.net/wk_kuan/article/details/39692371 1:简介 XIP,executed in place,本地执行。操作系统采用这种系统,可以不用将内核或执行代码拷贝到内存,而直接在代码的存储空间直接运行。采…

XIP技术

转自https://blog.csdn.net/amberman/article/details/8122300 侵删 首先认识下nandflash和norflash: NOR Flash 和 NAND Flash 是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR Flash 技术,彻底改变了原先由EPROM(Electrically Pr…

XIP技术总结

1.XIP eXecute In Place XIP即芯片内执行,指应用程序可以在flash闪存内运行,不必再把代码读到系统RAM中。需要注意的是,片内执行不是说程序直接在flash内执行,CPU的基本功能就是取指、译码和执行。norflash能在芯片内执行&#x…

XIP简介

1、XIP是什么? XIP(executed in place)本地执行。操作系统采用这种系统,可以不用将内核或执行代码拷贝到内存,而直接在代码的存储空间直接运行。 XIP是一种能够直接在闪速存储器中执行代码而无须装载到RAM中执行的机…

XIP(eXecute In Place)

XIP(eXecute In Place) 1.什么是XIP ​ eXecute In Place,即芯片内执行、就地执行,是指CPU直接从存储器中读取程序代码执行,而不用再读到内存中。应用程序可以直接在flash闪存内运行,不必再把代码读到系统…

网页游戏设计(HTML5入门)--- 基础知识篇

01 1、网络游戏(Online Game) 指用户通过计算机互联网进行交互娱乐的电子游戏,通常以互联网为传输媒介,以游戏运营商和用户计算机作为处理终端,以专门的游戏客户端软件或浏览器为信息交互窗口。 2、客户端形式 这一…

计算机基础知识教程

计算机硬件Hardware系统 起源:十九世纪英国; 诞生:1946.2.15,美国宾州大学; 发展:电子管-》晶体管-》集成电路-》大规模集成电路-》超大规模集成电路; 目前:PC系列微型计算机&#x…

HTML5基础网页设计(加代码CSS)

简单网页的模板&#xff0c;多多支持&#xff0c;感谢。知识整理 目录 一、HTML5 简单网页设计&#xff1a; CSS修饰 一、HTML5 简单网页设计&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>简单网页测试…

vue基础知识汇总

一、简介 1.vue是一套用于构建用户界面的渐进式JavaScript框架 2.特点&#xff1a; 采用组件化模式&#xff0c;提高代码复用率、且让代码更好维护声明式编码&#xff0c;让编码人员无需直接操作DOM&#xff0c;提高开发效率使用虚拟DOM优秀的Diff算法&#xff0c;尽量复用DO…

计算机基础知识点总结

系列文章目录 文章目录 系列文章目录一、计算机系统知识计算机组成进制转换数据编码校验码Flynn分类CISC与RISC流水线cache输入输出技术总线结构内存信息安全计算机性能局部性原理 编译原理文法 操作系统基础知识 软件工程软件生存周期系统分析基础&#xff1a;软件测试 计算机…

【WEB前端开发】基础知识大总结(HTML5+CSS3)

本文共一万七千字&#xff0c;十六个内容点&#xff0c;七十个知识点 目录 一、转义字符二、表单标签1、form标签2、input元素3、label 标签4、select 标签5、button 元素 三、语义化标签四、Head标签1、title 标签2、link标签3、style标签4、script 标签5、mate 标签6、base 标…

web开发基础知识

web开发基础知识学习 一、网页开发三剑客 ​ 我们看到的网页通过代码来实现的 &#xff0c;这些代码由浏览器解释并渲染成你看到的丰富多彩的页面效果。 这个浏览器就相当于Python的解释器&#xff0c;专门负责解释和执行(渲染&#xff09;网页代码。写网页的代码是专门的语言…

HTML基础知识总结

原文 经过这段时间的学习&#xff0c;对于html的一些基础知识有了一定的了解。所谓好记性不如烂笔头&#xff0c;唯有一点点累积&#xff0c;才能汇聚成知识的海洋。现在&#xff0c;我对这段时间的学习做一个总结。 一、HTML的定义 HTML&#xff0c;超文本标记语言&#xf…