arm linux 移植全部过程「建议收藏」

arm linux 移植全部过程「建议收藏」armlinux移植全部过程总述功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入总述之前做过linux在powe…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

总述

之前做过linux在powerpc上的移植,当然过程曲折,内容不充实,也没有想过要写这样一篇文章,满足实际需求就可以。现在又在做arm移植,自己所用的工具、设备等都有了比较大的改进,那我觉得应该写一篇文章来记录一下,因为过程中的问题,不是简单几句命令就能解释的,而网上的文章真的是初学者的噩梦,没有条理不说,质量也不敢恭维。
有的文章太细,都是在讲指令,大部分也都是抄来抄去,告诉大家照着步骤来就可以;而有的文章呢,则是在讲原理,类似于一些套话,读者想要的有可能只是一个可编译的环境,结果云里雾里不知所云。我是觉得理论与实践相结合是最合理的,如果有什么不对的地方,请留言,虽说只是自己的笔记,也需要对读者负责。当然,觉得我说的是废话,请右上角。

面向的读者

首先声明,作者水平有限,做嵌入式也只是开始,所以在现有这个阶段感觉困难重重。在克服了一些困难之后,觉得有些心得。所以,这篇文章,没有什么写作的目的,本来也是作者心血来潮准备普度众生_,从另一个角度上来讲算是一个笔记,所以更新说不定什么时候这腔热血没了也就停了。也就是说,这篇文章面向的对象一是那些处处寻门而不入的初学者,可以循序渐进的进入嵌入式的大门,再就是那些想要通过最简单的手段获取编译链的工程师,虽说是ARM但是思想我想很明确,是面向嵌入式的。总得来说,这是一篇嵌入式的文章,只要嵌入式系统或PC系统的工作模式不变,这篇文章都是可以作为参考的。

正文

现代计算机系统的工作模式

写在最前面的是现代计算机系统的工作模式,为什么要讲这个呢,就是因为凡事要有始有终,总是要明白在一台计算机或嵌入式系统启动之后的工作流程。
现代的计算机系统都是以CPU为核心运算单元和逻辑控制单元,加之一些外设而按要求构建的信息处理系统。CPU呢,只有运算功能,没有存储功能,这也就是为什么最初的CPU是用纸带的方式执行相关的运算流程。虽说我们生在21世纪,没必要去模拟当年的纸带机,但是CPU的启动过程是必须要明白的。

BOOT-ROM

最开始的计算机是由纸带打孔的方式输入执行程序的,随着计算机系统的不断发展,再加之懒人们的不断改进,最后输入计算机的程序,从纸片进入了ROM。
我查阅了一些文献,如下:

I/O devices that respond like memory components can be accessed through the processor’s physical-memory address space (see Figure 13-1). When using memory-mapped I/O, any of the processor’s instructions that reference memory can be used
to access an I/O port located at a physical-memory address. For example, the MOV instruction can transfer data between any register and a memory-mapped I/O port.
只要是可以像内存元件一样工作模式的I/O设备,都可以通过处理器的物理内存地址空间访问。
The AND, OR, and TEST instructions may be used to manipulate bits in the control
and status registers of a memory-mapped peripheral devices.

这是Intel Architectures Software Developer中内存映射有关的内容,如图所示:
Intel内存映射图
在x86体系结构中,是没有片上ROM的,所以这个EPROM也就是我们所说的CMOS,就可以装载系统的初始化代码即,BIOS。而在ARM体系架构中,大部分SoC都集成了片上ROM,而这个ROM在ARM嵌入式的领域内被叫作BOOT-ROM。因为x86系统中外设大部分是由主板厂商设计,故BIOS通常是由主板厂商自行设计;而ARM系统中,因为ARM上通常会集成很多相关的外设及接口,故一般是由SoC厂商实现BOOT-ROM。
因为BOOT-ROM的大小一般很小,通常情况下只能实现一些芯片内的初始化功能,以及将下一步的启动代码加载到内存中,然后将CPU控制权交给其执行。

After the BSP and APs have been selected (by means of a hardware protocol, see Section 7.5.3, “MP Initialization Protocol Algorithm for Intel Xeon Processors”), the BSP begins executing BIOS boot-strap code (POST) at the normal IA-32 architecture starting address (FFFF FFF0H). The boot-strap code typically performs the following operations:
1.Initializes memory.
2.Loads the microcode update into the processor.
3.Initializes the MTRRs.
4.Enables the caches.
5.Executes the CPUID instruction with a value of 0H in the EAX register, then reads the EBX, ECX, and EDX registers to determine if the BSP is “GenuineIntel.”
6.Executes the CPUID instruction with a value of 1H in the EAX register, then saves the values in the EAX, ECX, and EDX registers in a system configuration space in RAM for use later.
7.Loads start-up code for the AP to execute into a 4-KByte page in the lower 1 MByte of memory.
8.Switches to protected mode and insures that the APIC address space is mapped to the strong uncacheable (UC) memory type.
9.Determine the BSP’s APIC ID from the local APIC ID register (default is 0), the code snippet below is an example that applies to logical processors in a system whose local APIC units operate in xAPIC mode that APIC registers are accessed using memory mapped interface:
MOV ESI, APIC_ID; Address of local APIC ID register
MOV EAX, [ESI];
AND EAX, 0FF000000H; Zero out all other bits except APIC ID
MOV BOOT_ID, EAX; Save in memory
Saves the APIC ID in the ACPI and MP tables and optionally in the system configuration
space in RAM.

懒得翻译了,0xFFFFFFF0H就是x86 CPU在上电时IP的指针位置,而由上图可知,这个位置正好位于EPROM的范围内。ARM应该也是如此,但是启动地址没有查看相关文档。

U-Boot

相关的项目介绍什么的都不写了,到处都能搜到。作用就是提供一些访问硬件资源的API,能够访问到后来操作系统启动所需的文件,并初始化相关的启动环境,然后加载镜像或压缩镜像到内存中,进行必要的操作(解压缩等)后,将CPU执行权交给操作系统(什么叫执行权?就是jump到一个内存地址,继续运行的指令就是操作系统的指令。

Makfile

请参看(uboot makefile注释),这里有注释,有兴趣可以看一下。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189883.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • nfs图片服务器

    nfs图片服务器最近公司需要 图片从应用里面分离出来 如果将图片服务和应用服务放在同一个服务器的话 应用服务器很容易会因为图片的高 I O 负载而崩溃 因此对于有些大型网站项目 我们有必要将图片服务器和应用服务器分离 下图是我画的一个简单的用户 应用服务器 nfs 图片服务器的一个流转草图 从图片上分析 nbsp 192 168 1 252 作为服务器 nbsp 192 168 1 251 作为客户端

    2025年9月18日
    2
  • 网站备案是域名备案还是服务器备案(域名备案一定要服务器吗)

    网站域名服务器怎么备案内容精选换一换WordPress简称WP,最初是一款博客系统,后逐步演化成一款免费的CMS(内容管理系统/建站系统)。本文档指导用户使用华为云市场镜像“Wordpress官方正式版”部署WordPress博客系统。已购买虚拟私有云和弹性公网IP。如果规划为网站配置域名,需已经购买好相应的域名。弹性云服务器所在安全组添加了如表1所示的安全组规则,具体步骤空壳网站指备案主体已在…

    2022年4月10日
    71
  • 电脑快速切换ip软件(好用的换ip软件)

    切换IP软件,切换电脑手机IP如此简单大家在工作和生活中肯定会时不时遇到需要换IP的情况,为了预防需要换IP的时候束手无策,小编在此给大家介绍一款专门用来换IP的软件。打开搜索引擎,不管是百度,狗搜还是360,只要在上面搜索“换IP软件”,立马就会出现非常多的换IP的品牌,有免费的也有付费的,功能都没什么区别,就是换IP。卖IP的这么多,说明换IP的市场还是非常大的!不管你是做什么行业,网络推…

    2022年4月18日
    82
  • PyTorch安装最全流程

    PyTorch安装最全流程本文介绍基于Anaconda环境以及PyCharm软件结合,安装PyTorch深度学习框架。1.Anaconda安装下载链接:https://www.anaconda.com/1.1点击Next1.2点击同意1.3点击Next1.4选择目标文件夹,点击下一步1.5将Anaconda加入到系统变量安装成功后,在CMD中检查Anaconda时候加入到环境变量中。1.6单击启动AnacondaPrompt创建虚拟“房间”通过conda创建一个名为:pytorch.

    2022年6月24日
    73
  • Deep Link

    Deep LinkDeepLink是什么DeepLink,又叫deeplinking,中文翻译作深层链接。全家桶搜索的话你会发现第一个结果是AppLink。呵呵。说回正题。简单地从用户体验来讲,DeepLink,就是可以让你在手机的浏览器/GoogleSearch上点击搜索的结果,便能直接跳转到已安装的应用中的某一个页面的技术。如果你想体验的话,可以在Android4.1以上设备安装IMDB,然后在Go…

    2022年6月18日
    76
  • 修改浏览器设置为cookie怎么弄_删除浏览器cookie

    修改浏览器设置为cookie怎么弄_删除浏览器cookie怎么设置cookie,怎么设置cookie以及删除cookie和cookie详解注意:expires使用GMT或UTC格式的时间,我这里没有指定路径(path)和域(domain),当没有指定路

    2022年8月4日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号