如何编写bootloader程序的跳转函数

如何编写bootloader程序的跳转函数,第1张

可以使用汇编语言来编写bootloader程序跳转函数,大致步骤如下:1获取要跳转到的地址,并将其保存到某个寄存器;2然后使用指令jmp和存储的地址,实现跳转;3最后执行地址上的代码,完成跳转。

ECU上电后,先进入bootLoader确定application程序是否有问题,如果没有问题则跳转至application,如果application出现问题,程序会停留在bootloader中,等待刷写命令。软件刷写主要分为三部分:

1、pre-programming step

2、programming step

3、post-programming step

pre-programming step

从名字可以看出,该步骤主要是下载程序前的一些 *** 作,包括唤醒ECU、读取特定的DID、通信管理等,详细的 *** 作见图1。

图1 pre-programming step

其中:

1、唤醒ECU,唤醒的方法和策略由汽车制造商制定;

2、为了关闭DTC存储和运行0x28服务关闭相关的通信,需运行0x10服务跳转至extendedDiagnosticSession,

3、进入extendedDiagnosticSession后,汽车制造商可以进一步进行特定数据链路的初始化;

4、运行0x31服务对刷写条件进行检查,例如低压电是否在正常范围内;

5、为了防止刷写过程中出现异常误触发DTC存储,运行0x85服务关闭DTC的存储;

6、该步骤提供给汽车制造商一个接口,可以通过0x31服务启动或关闭ECU的故障安全响应(failsafe reaction);

7、为了提高刷写速度,降低刷写程序时总线负载率,通过运行0x28服务关闭无关报文,比如应用报文和网络管理报文;

8、在关闭部分通信之后,通过0x22服务读取被刷ECU的状态(应用软件和数据)、软件指纹信息等;

9、为了减少刷写的时间,可以通过0x87服务提高CAN总线的波特率。

programming step

该步骤用于将软件或者数据下载到被刷ECU中,主要包括进入特定的安全等级、写入指纹信息、下载软件和数据等,如图2所示。

图2 programming step

其中:

1、运行0x10服务进入programmingSession;

2、运行0x27服务进入特定的安全等级;

3、运行0x2E服务将指纹信息写入ECU;

4、运行0x34、0x36、0x37服务将永久存储区写入默认值;

5、运行0x31服务检查步骤4是否成功,另外一种方法是通过0x37的响应确定是否成功;

6、运行0x31服务对特定的Flash进行擦除;

7、分别运行0x34、0x36、0x37服务将Flash driver下载至内存中;

8、运行0x31服务检查Flash driver下载是否成功;

9、分别运行0x34、0x36、0x37服务将软件和数据下载至ECU的flash中;

10、运行0x31服务检查步骤9是否下载成功;

11、运行0x31服务验证程序是否能正常运行,例如checksum、标志位等;

12、在下载完软件和数据后,汽车制造产商需要一些特定的 *** 作,比如写入VIN码等。

post-programming step

该步骤主要通过0x11服务对ECU进行复位或者通过0x10服务将session切换至defaultSession,如图3所示,如果在pre-programming step中调整了波特率,须通过特定的 *** 作将波特率调整至正常值。通常 *** 作是运行0x11服务使ECU复位,回到正常状态。

图3 post-programming step

该刷写流程是14229标准中提到的,不同的OEM有不同的标准,但是主体的步骤与14229应该还是相同的。

ecu中的程序是怎么编写的 汽车ecu中的程序是根据汽车的特性用编程器写出来的,每个厂家的编程码都是不一样的。

汽车ecu指的是汽车的电控单元,主要作用是采集传感器的信息,然后计算出一些数值,再通过控制执行器进行相应的动作。比较著名的企业有博世、大陆、电装等企业。

ecu的开发需要硬件工程师、底层软件工程师、控制策略工程师、标定工程师、上位机软件工程师等人员。

一个产品级的ecu应具有以下功能:

1、bootloader:在开发过程中,下载程序和debug一般有专门的接口,量产后程序或许会进行更改,这就需要编写一个引导程序,用来程序的更新。

2、信号采集:汽车上面会有很多传感器,有模拟信号和数字信号等,系统能对信号进行收集和处理。

3、执行器驱动:发动机上面有很多的驱动器,比如节气门、喷油电磁阀、点火电磁阀、氧传感器等。驱动信号主要两种,高低电平、PWM波等。

4、通信:ecu和其它配件的通信是为了故障诊断和标定,可以快速、准确的找到汽车故障部位。

ecu在什么位置

一般来说,ecu都被安装在发动机舱内的电瓶旁边,有些车型也会将其安装在方向盘下方的塑料板内。根据车型的不同,ecu的安装位置也有一定的差异。

ecu俗称汽车中的行车电脑,通过ecu可以实现汽车对变速箱、发动机、娱乐系统、音响系统、刹车系统等地方的控制。当ecu出现故障时,汽车可能会出现仪表盘上故障灯乱跳、汽车油门和刹车紊乱等症状。这种情况需要及时到维修店或者4s店请专业人士进行检查和维修,防止在用车过程中出现安全隐患。

ecu对工作环境的要求不高,其电压范围一般在65v-16v之间,工作温度在零下40度到零上80度,可以承受1000hz以下的震动,所以一般来说,ecu并不容易损坏,所以在日常用车时基本不需要对它进行维护。

截止到2019年9月,市面上越来越多的汽车改装厂可以对汽车提供刷写ecu的服务,通过刷写ecu可以实现汽车动力的提升。但是需要注意的是,刷写ecu会降低发动机的使用寿命,改装时一定要慎重。 (图/文/摄: 问答叫兽) @2019

通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对 Boot Loader 归纳出一些通用的概念来,以指导用户特定的 Boot Loader 设计与实现。

1 Boot Loader 所支持的 CPU 和嵌入式板

每种不同的 CPU 体系结构都有不同的Boot Loader。有些 Boot Loader 也支持多种体系结构的 CPU,比如 U-Boot 就同时支持 ARM 体系结构和MIPS 体系结构。除了依赖于 CPU的体系结构外,Boot Loader 实际上也依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种 CPU 而构建的,要想让运行在一块板子上的 Boot Loader 程序也能运行在另一块板子上,通常也都需要修改 Boot Loader 的源程序。

2 Boot Loader 的安装媒介(Installation Medium)

系统加电或复位后,所有的CPU 通常都从某个由 CPU 制造商预先安排的地址上取指令。比如,基于 ARM7TDMI core 的 CPU 在复位时通常都从地址 0x00000000 取它的第一条指令。而基于CPU 构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM 或 FLASH 等)被映射到这个预先安排的地址上。因此在系统加电后,CPU 将首先执行Boot Loader 程序。

下图1就是一个同时装有 Boot Loader、内核的启动参数、内核映像和根文件系统映像的固态存储设备的典型空间分配结构图。

图1 固态存储设备的典型空间分配结构

3 用来控制 Boot Loader 的设备或机制

主机和目标机之间一般通过串口建立连接,Boot Loader 软件在执行时通常会通过串口来进行 I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。

4 Boot Loader 的启动过程是单阶段(Single Stage)还是多阶段(Multi-Stage)

通常多阶段的 Boot Loader 能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的 Boot Loader 大多都是 2 阶段的启动过程,也即启动过程可以分为 stage 1和 stage 2 两部分。而至于在 stage 1 和 stage 2 具体完成哪些任务将在下面几篇讨论。

5 Boot Loader 的 *** 作模式 (Operation Mode)

大多数 Boot Loader 都包含两种不同的 *** 作模式:"启动加载"模式和"下载"模式,这种区别仅对于开发人员才有意义。但从最终用户的角度看,Boot Loader 的作用就是用来加载 *** 作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。

启动加载(Boot loading)模式:这种模式也称为"自主"(Autonomous)模式。也即 Boot Loader 从目标机上的某个固态存储设备上将 *** 作系统加载到 RAM 中运行,整个过程并没有用户的介入。这种模式是 Boot Loader 的正常工作模式,因此在嵌入式产品发布的时侯,Boot Loader 显然必须工作在这种模式下。

可能会刷机失败,刷机失败自救办法;

1、首先在电脑上下载并安装好Android SDK程序,具体下载地址和安装配置方法请直接上Android SDK官网;

2、将USB数据线将手机连接到电脑上,打开手机,电脑上会自动提示安装设备驱动程序的,选择自定义驱动程序位置(不要让系统自行查找驱动程序安装),由于之前已经安装了Android SDK程序,因而这步中驱动程序的位置就默认在Android SDK安装目录下的usb_driver子目录,然后选择从此目录中安装驱动程序即可;

3、下载和自己机型匹配可用的Recovery程序,推荐使用最常见的Clock Recovery程序,建议将下载好的Recovery程序放某一特定的目录下以作备用;

4、安装好Recovery程序,在电脑上点击桌面左下角的“开始”—“运行”,输入cmd回车即可打开命令提示符,输入#adb devices,按回车,之后如果返回的是一串序列号即表示手机已正常连接,再在命令提示符中使用cd命令切换至Recovery程序所在的目录,接着输入下面的几行命令,每输完一行命令后请按回车换行:

#adb reboot bootloader (回车后手机就进入fastboot模式了,接着执行下面的命令把recovery程序安装到手机上)

#fastboot flash recovery-RA-Magic-v231img (回车后如果看到下面的提示即说明recovery程序已经成功安装)

fastboot flash recovery recovery-RA-Magic-v231img

sending ‘recovery’ (4594 KB)… OKAY

writing ‘recovery’… OKAY

5、然后拔掉手机USB数据线断开手机和电脑的连接,再将手机关机,试试按指定键是否可以进入recovery模式,可以进的话,就说明这部刷机失败的安卓手机已经复活成功了。

回答于 2022-12-26

升级bootloader方法

第一步,点击”应用程序“

第二步,点击“设定“,选择“一般”

第三步,点击“关于设备”,选择“系统更新”中的“更新”即可。

BootLoader

在嵌入式 *** 作系统中,BootLoader是在 *** 作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用 *** 作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。

以上就是关于如何编写bootloader程序的跳转函数全部的内容,包括:如何编写bootloader程序的跳转函数、ECU刷写,两组CAN线,一组诊断,一组刷写,怎么跳线、ecu中的程序是怎么编写的;ecu在什么位置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9721516.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存