[初级教程]搭建arm-linux裸机开发的环境

发布者:感恩的7号最新更新时间:2022-04-21 来源: eefocus关键字:arm-linux  裸机开发  环境 手机看文章 扫描二维码
随时随地手机看文章

1.前言

在上一遍的文章中,我介绍了如何设置芯片的启动模式,根据三星的官方主推的IROM模式,介绍了如何从IROM模式启动,并从Nand中加载我们的引导程序,有了一些前面的知识铺垫后,这一篇文章,我将进一步深入,教你如何实现你的引导程序,并搭建一个调试引导程序的实验环境。这里我介绍两种方式,这两种方式各有前提条件,具体如下:


2.开发环境的搭建

开发环境其实大同小异,总结一下用到的几个:


windows主机

vmware虚拟机

在vmware虚拟机中安装ubuntu桌面操作系统或者redhat或者debain或者centOS均可,看你自己习惯

调试工具(H-JTAG或者J-link)

H-JTAG和J-link的调试搭建环境不太一样,有区别,详细见下面


使用H-JTAG作为开发工具的


有H-jtag调试器USB接口的那种

准备H-JTAG软件用到的配置文件,以及驱动文件,如果H-JTAG的官方已经支持了你的nandflash或者Norflash,那么很幸运,你不需要去写这样的配置文件,如果你像我一样用的是H-JTAG的官方还没有支持的,那就得我们自己写配置文件和初始化脚本

拿我的开发板来说,我用iROM启动,从nand中加载引导程序,但我的nand型号是SPANSION公司的S34ML02G100TF100这款芯片,H-JTAG的官方还不支持我的s3c2416x+S34ML02G100TF100这样的板子,那我就得自己写这配置文件,也就是s3c2146+S34ML02G.hfc,不用担心,这种配置文件读一遍H-JTAG的官方文档就会写的。

使用H-JTAG软件,如果能正确识别出你的芯片和nandflash,能对nand芯片进行擦除和读写,那么接下来的部分,你就跳过了,不用看了。

使用J-link作为开发工具的


使用J-link的前提是你的开发板中已经有了一个引导程序,U-Boot或者自己写的bootstrap,不然不好调试。

假设你有U-Boot在你的开发板中,s3c2416的地址映射中有说SDRAM的地址是0x30000000,如果开启了MMU的,那么SDRAM的起始地址是0xC0000000,如果不懂为什么是0xC0000000,你可以百度百度。

假设你的U-Boot能正常引导,那么你想调试你自己的Bootstrap.bin的时候,用下面的命令就可以调试了

    tftp c0008000 bootstrap.bin

    go   c0008000


或者纯用J-link调试的命令


    h

    r

    speed 8000

    loadbin d:sharebootstrap.bin 0x30008000

    setpc 0x30008000

    g


3.如何为自己的芯片跟Nand写一份*.hfc配置文件?

就以我的主控s3c2416+nand(S34ML02G100TF100)为例,我的H-JTAG软件装在了C:Program Files (x86)H-JTAG,我要的写的配置文件就是放在该目录下的HFC Examples下面的,那么我们先从HFC Examples下找一个相似的,比如说s3c2416+K9F2G08.hfc,具体修改步骤如下:


拷贝一份s3c2416+K9F2G08.hfc,重命名成s3c2416+S34ML02G100TF100.hfc

打开s3c2416+S34ML02G100TF100.hfc,进入修改其中的参数,用记事本打开即可

下面是未修改前的s3c2416+K9F2G08的内容:


FLASH SECTION:

NAND-FLASH

S3C2416+K9F2G08

MEMORY SECTION:

08-BIT X 1-CHIP

0x0

0x30000000

XTAL SECTION:

NULL

TCK SECTION:

0

0

SCRIPT SECTION:

SoftReset+++

SetMem+32-Bit+0x53000000+0x00000000

SetMem+32-Bit+0x4A000008+0xFFFFFFFF

SetMem+32-Bit+0x4A000048+0xFFFFFFFF

SetMem+32-Bit+0x4A00001C+0x1FFFFFFF

SetMem+32-Bit+0x4A000004+0x00000000

SetMem+32-Bit+0x4A000044+0x00000000

SetMem+32-Bit+0x4C000024+0x00000225

SetMem+32-Bit+0x4C000000+0x00000E10

SetMem+32-Bit+0x4C000004+0x00000800

SetMem+32-Bit+0x4C000010+0x00640061

SetMem+32-Bit+0x4C000018+0x00200102

SetMem+32-Bit+0x4C00001C+0x00000000

SetMem+32-Bit+0x4C000020+0x00000051

SetMem+32-Bit+0x48000000+0x00049253

SetMem+32-Bit+0x48000004+0x44000050

SetMem+32-Bit+0x48000008+0x005D0035

SetMem+32-Bit+0x48000004+0xC4000051

SetMem+32-Bit+0x4800000C+0x80000032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x4800000C+0xC0000032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x4800000C+0x44000032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x4800000C+0x44000130

SetMem+32-Bit+0x48000004+0xC4000052

SetMem+32-Bit+0x48000004+0xC4000051

SetMem+32-Bit+0x48000010+0x00000020

SetMem+32-Bit+0x4800000C+0x44000030

SetMem+32-Bit+0x48000004+0xC4000052

Delay+++1

SetMem+32-Bit+0x4800000C+0x47800032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x4800000C+0x44000032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x48000010+0x0000040D

SetMem+32-Bit+0x48000004+0xC4000050

PGMOPTION SECTION:

ADDON SECTION:

NULL


下面说说怎么修改这文件


FLASH SECTION:

NAND-FLASH

S3C2416+K9F2G08 //这里是名称,改成S3C2416+S34ML02G100TF100

MEMORY SECTION:

08-BIT X 1-CHIP //我的开发板的硬件接线(指Nand)8bit,数量就一个

0x0             //这里填的地址是H-JTAG将把擦写或者编程Nand的驱动加载到哪里

0x30000000      //内存的地址,s3c2416的内存放在BANK6起始,物理地址是0x30000000

XTAL SECTION:

NULL            //可以不填,有些nand芯片驱动需要知道外接晶振的大小,但我们2416不需要

TCK SECTION:

0

0

//接下来这个区域可以要,可以不要,这里主要是初始化ARM的内存或者寄存器,这是一段脚本 

//命令格式:SetMem+地址位宽+寄存器或者内存地址+要设置的值

//比如说,第二行的SetMem+32-Bit+0x53000000+0x00000000意思是将0x53000000处设置成0x00000000

SCRIPT SECTION: 

SoftReset+++

SetMem+32-Bit+0x53000000+0x00000000

SetMem+32-Bit+0x4A000008+0xFFFFFFFF

SetMem+32-Bit+0x4A000048+0xFFFFFFFF

SetMem+32-Bit+0x4A00001C+0x1FFFFFFF

SetMem+32-Bit+0x4A000004+0x00000000

SetMem+32-Bit+0x4A000044+0x00000000

SetMem+32-Bit+0x4C000024+0x00000225

SetMem+32-Bit+0x4C000000+0x00000E10

SetMem+32-Bit+0x4C000004+0x00000800

SetMem+32-Bit+0x4C000010+0x00640061

SetMem+32-Bit+0x4C000018+0x00200102

SetMem+32-Bit+0x4C00001C+0x00000000

SetMem+32-Bit+0x4C000020+0x00000051

SetMem+32-Bit+0x48000000+0x00049253

SetMem+32-Bit+0x48000004+0x44000050

SetMem+32-Bit+0x48000008+0x005D0035

SetMem+32-Bit+0x48000004+0xC4000051

SetMem+32-Bit+0x4800000C+0x80000032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x4800000C+0xC0000032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x4800000C+0x44000032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x4800000C+0x44000130

SetMem+32-Bit+0x48000004+0xC4000052

SetMem+32-Bit+0x48000004+0xC4000051

SetMem+32-Bit+0x48000010+0x00000020

SetMem+32-Bit+0x4800000C+0x44000030

SetMem+32-Bit+0x48000004+0xC4000052

Delay+++1

SetMem+32-Bit+0x4800000C+0x47800032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x4800000C+0x44000032

SetMem+32-Bit+0x48000004+0xC4000053

SetMem+32-Bit+0x48000010+0x0000040D

SetMem+32-Bit+0x48000004+0xC4000050

PGMOPTION SECTION:

ADDON SECTION:

NULL


上面简单的介绍了一下如何去自己编写一个正确的.hfc文件,那么光有这个配置文件还是不够的,你还得有个相应驱动文件,这个文件应该放置在C:Program Files (x86)H-JTAGFDeviceNAND-FLASH下,是与你的.hfc文件相匹配的。


4.如何在~/…/H-JTAG/FDevice/NAND-FLASH下实现一个匹配的驱动?

在上一个小段中我们在C:Program Files (x86)HFC Examples下实现了一个s3c2416+S34ML02G100TF100.hfc文件,只有这个文件还无法让H-JTAG正确的识别我们的nandflash,我们还需要增加个描述性的文件,这个文件该放在C:Program Files (x86)H-JTAGFDeviceNAND-FLASH,同样的,在C:Program Files (x86)H-JTAGFDeviceNAND-FLASH下复制一份s3c2416+K9f2G08的描述文件,未修改的文件如下:


FLASH_TYPE=3

FLASH_SIZE=256M

FLASH_ID=0x00AA00EC

FLASH_ID2=0x00DA00EC

FLASH_ADDRESS=0x0

FLASH_NAND_DEVICE=(2048+64)x64PAGESx2048BLOCKS

FLASH_WIDTH=8/0/0

FLASH_DRIVER=1204/0/0


具体修改步骤如下:


将C:Program Files (x86)H-JTAGFDeviceNAND-FLASHs3c2416+K9f2G08的描述文件复制一份

重命名成C:Program Files (x86)H-JTAGFDeviceNAND-FLASHs3c2416+S34ML02G100TF100

文件名与我们之前的s3c2416+S34ML02G100TF100.hfc文件一致

修改s3c2416+S34ML02G100TF100这个文件

下面说说怎么修改


FLASH_TYPE=3  //这一行是nandflash的类型,3代表nandflash

FLASH_SIZE=256M //这是我的S34ML02G100TF100的存储容量,256MB

FLASH_ID=0x00DA0001 //这里是nandflash的芯片的ID,我的S34ML02G100TF100的ID应该是0x00DA0001,所以这里要修改一下

FLASH_ID2=0x000F000F //这里是nandflash的第二ID,有的nandflash会有个复用的名字或者叫别名,我的S34ML02G100TF100的这个地方值0x000f000f,所以修改一下

FLASH_ADDRESS=0x08000000 //我的开发板上的原理图接入的地方是BANK1,而BANK1的物理地址是0x08000000,所以,这里得改

FLASH_NAND_DEVICE=(2048+64)x64PAGESx2048BLOCKS//这里描述是nandflash的页、块、容量大小

FLASH_WIDTH=8/0/0  //这里是nandflash的接入位宽,我的开发板原理图是8位的IO模式,所以选这个

FLASH_DRIVER=1204/0/0 //这里是默认值,不用改


总结

经过上面的这几步骤的配置,至少应该是能完成这个arm-linux的逻辑开发环境,为接下来的全面裸机开发调试做准备。

关键字:arm-linux  裸机开发  环境 引用地址:[初级教程]搭建arm-linux裸机开发的环境

上一篇:[初级教程]samsung s3c2416x 的启动方式
下一篇:[初级教程]arm-linux裸机开发之-bootstrap.bin的实现

推荐阅读最新更新时间:2024-11-13 07:00

农尚环境:全资子公司拟设立合资公司,涉电源管理类
2月15日,农尚环境发布公告称,为提振未来经营业绩,其全资子公司武汉芯连微电子有限公司拟与深圳市中自信息技术有限公司共同出资,设立合资公司(以下简称“目标公司”),并以合资公司共同研发、生产和销售电源管理类集成电路芯片、功率半导体模块等电子元器件。 公告显示,目标公司暂定名为深圳中自芯连技术有限公司,注册资本1000万元。其中,武汉芯连微电子有限公司出资600万元,占比60%。目标公司经营范围:集成电路芯片设计及服务;集成电路芯片及产品制造;集成电路芯片及产品销售;半导体分立器件制造;半导体分立器件销售;电子元器件、微电子器件及其他电子产品的开发、购销等。
[手机便携]
Littelfuse SIDACtor®保护晶闸管可在浪涌环境中加强浪涌保护
中国,北京,2018年1月22日讯 - Littelfuse, Inc. ,今日宣布推出两个SIDACtor®保护晶闸管产品系列,专为保护高频高强度或異常环境中的设备免受严重的瞬态过电压而设计。 Pxxx0MEL 5kA系列和Pxxx0FNL 3kA系列SIDACtor保护晶闸管能够更加可靠地应对多次高能量浪涌事件。 很多未采用半导体的高功率防护产品在经历几次浪涌事件后便会出现性能减退,采用半导体的Pxxx0MEL和Pxxx0FNL系列则与之不同,可发生多次浪涌事件时持续发挥保护功效,同时不会出现性能减退。 Pxxx0FNL系列3kA SIDACtor晶闸管 Pxxx0ME系列5kA SIDACtor晶
[半导体设计/制造]
Littelfuse SIDACtor®保护晶闸管可在浪涌<font color='red'>环境</font>中加强浪涌保护
AR眼镜环境自适应调光控制方案
我家有一只语音控制的变色灯泡,通常保持“暖白”色调。或者说,在我四岁的女儿发现控制方法之前,一直如此。自从她解锁了调光方法,就经常听她喊“红灯”、“桔灯”,直到唤出七彩颜色。不久后,她又开始尝试控制灯泡发出更多奇妙的颜色。 但我还是发现了她的困惑:她在白天想要“黑色灯”,但惊讶地发现灯只是熄灭了,并没有呈现黑色。作为物理学家,我努力以简单的语言向她解释:光线中没有黑色,所以光源无法发出黑色光。 你可能想知道我为何要讲这个故事——作为虚拟图像和现实世界融合的媒介,AR 眼镜面临了同样的问题。 虚拟图像与现实世界的融合 通常情况下,AR 眼镜的工作原理是将虚拟图像投射到现实世界,将虚拟图像与现实世界完美融合,让大脑无法区分
[嵌入式]
智能照明控制环境光测量与计时电路设计
  户外照明通常是由人工操作机械开关控制照明系统的打开或关闭。为了节省能源,您可能不希望整个晚上都在某个区域开启照明系统,这种情况下,如果能够精确地控制照明系统,在必要的时候自动打开或关闭照明系统,将会带来更多的便利条件。利用控制器可以检测环境光强,天黑时打开照明灯并保持一定的时间间隔,然后在指定时间自动关闭照明灯。早上,则对该过程进行反向操作。如果预定时间内环境光强仍低于预设的照明门限,系统将打开照明灯。环境光足够亮时,系统将关闭照明灯。利用环境光传感器(ALS)检测、测量环境光强,据此设计智能化照明控制器并不困难。由于控制器配备实时时钟(RTC),还可在规定的时间打开或关闭照明系统。本文介绍的管理系统可用于市电照明系统。   集
[测试测量]
智能照明控制<font color='red'>环境</font>光测量与计时电路设计
ARM-Linux移植之(一)——内核启动流程分析
内核版本:2.6.22 为什么要采用这样一个较低的版本进行移植了,因为韦东山大牛说了,低版本的才能学到东西,越是高版本需要移植时做的工作量越少,学的东西越少。 内核启动分为三个阶段,第一是运行head.S文件和head-common.S,第三个阶段是允许第二是运行main.c文件 对于ARM的处理器,内核第一个启动的文件是arc/arm/kernel下面的head.S文件。当然arc/arm/boot/compress下面也有这个文件,这个文件和上面的文件略有不同,当要生成压缩的内核时zImage时,启动的是后者,后者与前者不同的时,它前面的代码是做自解压的,后面的代码都相同。我们这里这分析arc/arm
[单片机]
耐600℃高温存储器问世,有助开发极端环境下人工智能计算系统  
美国宾夕法尼亚大学科学家研制出一款可在600℃高温下持续工作60小时的存储器。这一耐受温度是目前商用存储设备的两倍多,表明该存储器具有极强的可靠性和稳定性,有望在可导致电子或存储设备故障的极端环境下大显身手,也为在恶劣条件下进行密集计算的人工智能系统奠定了基础。相关论文发表于新一期《自然·电子学》杂志。 最新存储设备示意图。 图片来源:《自然·电子学》 研究人员表示,这款存储器是一种非易失性设备,能在无电源状态下长期保留存储其上的信息。相较之下,传统硅基闪存在温度超过200℃时便开始失效,导致设备故障和信息丢失。 最新存储器使用铁电氮化铝钪(AlScN)研制而成。AlScN具有存储优势,因为它能在去除外部电场后,在更高温度下
[手机便携]
耐600℃高温存储器问世,有助<font color='red'>开发</font>极端<font color='red'>环境</font>下人工智能计算系统  
手机圈专利混战正酣 国内专利保护环境正在形成
    手机企业发新品喜欢扎堆,可如今连打官司都凑在了一起。近一个多月来,手机行业引发轰动的官司不断。华为起诉三星、佰利起诉苹果、高通起诉魅族,件件都吸引眼球。这些官司有不少共同点:都和知识产权有关,都涉及手机领域,都发生在中国企业和跨国巨头之间。在频发的专利官司之后,专利官司可能将成为手机行业竞争的常规武器。     华为诉三星     可能只是一个前奏     如今,全球手机前三名已经相对稳定,分别是三星、苹果和华为。为了占有市场,这三者之间很难长期和平相处。先是苹果和三星之间长达数年的专利大战,赔偿金额一改再改,涉及产品不断增加,也被称为“世纪专利大战”。就在这两家企业已经逐渐达成和解的时候,新的战局又开始了,这一
[手机便携]
网络安全宣传月: 与莱迪思一起应对不断变化的网络安全环境
随着全球互连程度加以及对数字技术依赖性的增加,网络犯罪也日益猖獗。事实上,据《福布斯》报道,2023年的数据泄露事件比2021年增加了72%,而2021年就已经创下纪录。随着网络威胁变得越来越复杂和频繁,企业必须采取积极主动的方法来保护其系统、数据和运营。 其中一种方法包括实施网络弹性:抵御攻击、响应威胁和从攻击中恢复的能力,从而实现持续的保护和最小程度的中断。 每年十月是CISA.gov(网络安全和基础设施安全局)推出的网络安全宣传月,旨在促进网络弹性文化的发展。在莱迪思,我们常年致力于帮助我们的客户和合作伙伴利用FPGA技术应对不断变化的网络安全环境,因此我们非常重视这一年度主题活动。毕竟,我们可以通过这个绝佳的机
[网络通信]
网络安全宣传月:  与莱迪思一起应对不断变化的网络安全<font color='red'>环境</font>

推荐帖子

【下载】基于STM32的μC/OSⅡ移植例程
资料大小:1583K(本论坛限制,传不上来)资料说明:1.改移植和模板工程不包括操作系统核ucosⅡ的源代码,如需使用请向操作系统的供应商联系或者网上下载免费的源代码。2.本移植使用的是ucosⅡ2.83版本,需要在OS文件夹下添加的操作系统源代码包括如下文件:os_flag.cos_mbox.cos_mem.cos_mutex.cos_q.cos_sem.cos_task.cos_time.cos_tmr.cos_core.c下载地址:
ellyzhang stm32/stm8
UCF文件中时序约束的语法
约束UCF文件,从ConstrainsEditor直接输入是最方便、最直接的添加约束的方法了。我总结了以下几种常用的语法:2\\-i:Tu/Q!k2u\"T2v*r;H\"M$`\"A6Q7s4x1)周期约束;n,M$i6B!t:{约束是一个基本时序和综合约束,它附加在时钟网线上,时序分析工具根据PERIOD约束检查时钟域内所有同步元件的时序是否满足要求,它将检查与同步时序约束端口相连接的所有路径的延迟,但是不会检查PAD到寄存器的路径
eeleader FPGA/CPLD
申请个板子学习
申请个板子学习楼主请详述相关内容回复楼主izero的帖子楼主想拿到开发板,可得说详细点哦,赶紧把内容补全吧
izero 微控制器 MCU
求探界者USB接口干扰问题
探界者领界(低配),在使用过程中发现车机连接CARPLAY后,经常掉线。后经多方学习,此问题为该车多媒体USB接口模块供电不稳定造成,常规解决方法是更换海外版车辆的USB接口模块可以解决。但在某宝发现,原来价格几十元到一百元的模块,价格飞涨至290元。兜中缺米,不得已自己想办法。思路是解决原车USB接口供电不稳问题,方法是使用带额外供电接口的USB数据线转接线,数据端接USB模块,额外供电端接点烟器电源转换器,手机数据线接数据转接线接口。通过为手机提供额外的供电,解决了原车USB模块供电不稳定
zhuifengyashi 汽车电子
蓝牙遥控器串口的问题
我想做一个蓝牙遥控器,买了一本讲蓝牙BLE4.0的书。讲TI的一个SimpleBLEPeripheral项目。说如果用到了UART,就定义那个宏。我不太明白,蓝牙通信不是用的串口吗?难道还有可能不用串口?是不是CC2541实现蓝牙通信可以不用串口?谢谢!蓝牙遥控器串口的问题注意语境,串口在一般语境下特指UART,但有时又指所有采用串行数据传输的通迅接口,比如SPI、I2C等也被归入串口。单纯的蓝牙芯片一般都采用SPI等接口,这样操控更灵活、可靠,而CC254
chenbingjy 无线连接
51单片机驱动电动机
本帖最后由paulhyde于2014-9-1509:39编辑51单片机控制四相步进电机作者:易劲松 QQ:371719025 Email:yijingsong@hotmail.com  接触单片机快两年了,不过只是非常业余的兴趣,实践却不多,到现在还算是个初学者吧。这几天给自己的任务就是搞定步进电机的单片机控制。以前曾看过有关步进电机原理和控制的资料,毕竟自己没有做过,对其具体原理还不是很清楚。今天从淘宝网买了一个EPSON的UMX-1型步进电机,此步进电机为双极性四相,接线
jinzhao 电子竞赛
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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