当前位置: 首页 > news >正文

字节跳动社招面经 —— BSP驱动工程师(4)

接前一篇文章:字节跳动社招面经 —— BSP驱动工程师(3)

本文内容参考:

嵌入式硬件平台修改启动地址-CSDN博客

特此致谢!

上一回开始针对于“嵌入式充电站”发的一篇文章字节跳动社招面经——BSP驱动工程师中的面试题第2题 —— 如何修改启动地址进行解析。

讲了不同硬件平台以及不同启动阶段下的启动地址配置,本回讲解具体的、常见的修改(配置)启动地址的方法。

(2)修改启动地址的常见方法

1)方法1:通过硬件配置(MCU/嵌入式设备)

对应于上一回所讲的MCU/嵌入式芯片:

  • 设置Boot Pins

某些芯片(如STM32、海思等)通过引脚电平选择启动模式(从Flash、RAM 或系统存储器启动)。
示例:STM32F4的BOOT0和BOOT1引脚组合决定启动地址源。

  • 修改Option Bytes(熔丝位):

使用专用工具(如STM32CubeProgrammer)修改芯片的启动地址寄存器。
示例:设置nBOOT_SEL位选择用户Flash的启动地址。

2)方法2:通过Bootloader配置

对应于上一回所讲的启动阶段中的操作系统内核阶段:

  • U-Boot

修改环境变量中的内核加载地址和启动命令。示例如下:

# 设置内核加载地址
setenv loadaddr 0x82000000
# 设置启动命令(从指定地址启动)
setenv bootcmd "load mmc 0:1 ${loadaddr} zImage; bootz ${loadaddr}"
saveenv
  • GRUB(x86/Linux)

编辑/etc/default/grub,配置内核加载参数。示例如下:

GRUB_CMDLINE_LINUX="mem=512M console=ttyS0,115200"
sudo update-grub

3)方法3:修改代码中的链接地址

  • 嵌入式开发

在链接脚本(如 .ld 文件)中指定代码的起始地址。示例如下(ARM 链接脚本):

MEMORY {ROM (rx) : ORIGIN = 0x08000000, LENGTH = 256KRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64K
}
  • 操作系统内核

编译时指定加载地址(如Linux内核的CONFIG_PHYS_OFFSET)。

4)方法4:通过调试器强制修改

  • JTAG/SWD工具

使用J-Link、OpenOCD等工具直接写入启动地址寄存器或跳转指令。示例如下(通过OpenOCD设置ARM PC寄存器):

reset init
reg pc 0x8000000
resume

至此,字节跳动社招BSP驱动工程师一面的第2题 —— 如何修改启动地址就解答、解析完了。

http://www.dtcms.com/a/163991.html

相关文章:

  • vue.js中的一些事件修饰符【前端】
  • uni-app 中封装全局音频播放器
  • 深入蜂窝物联网 第四章 Cat-1 与 5G RedCap:带宽、低时延与未来趋势
  • 五、UI自动化测试05--PyTest框架
  • 【SpringBoot】基于MybatisPlus的博客管理系统(1)
  • 【Unity】使用Socket建立客户端和服务端并进行通信的例子
  • 东土科技NewPre系列智能控制器的创新之旅
  • VMware安装 银河麒麟操作系统桌面版 V10 SP1 2403
  • HotSpot的算法细节
  • 集群系统的五大核心挑战与困境解析
  • 4月28号
  • 漏洞复现清单整理-预备梳理,等待补充
  • 多维驱动:负载均衡何以成为现代系统架构的基石
  • 网络爬取需谨慎:警惕迷宫陷阱
  • Ansible安装配置
  • 代发考试战报:4月份 思科认证,华为认证,考试战报分享
  • Twitter 工作原理|架构解析|社交APP逻辑
  • 洛谷题解 | CF1979C Earning on Bets
  • <Revit二次开发> 通过一组模型线构成墙面,并生成墙。Create(Document, IList.Curve., Boolean)
  • 以梦为舟,驶向中医传承新蓝海
  • 宾馆一次性拖鞋很重要,扬州卓韵酒店用品详细介绍其材质与卫生标准
  • Windows 系统下使用 Docker 搭建Redis 集群(6 节点,带密码)
  • (计数)洛谷 P8386 PA2021 Od deski do deski/P10375 AHOI2024 计数 题解
  • Java项目中使用minio存储服务
  • softlockup_panic=1配置方法及区别
  • 基于论文的大模型应用:基于SmartETL的arXiv论文数据接入与预处理(四)
  • 常见的 CSS 知识点整理
  • 实验七:基于89C51和DS18B20的温度采集与显示
  • 源码角度分析 sync.map
  • C++智能指针滥用带来的性能与内存问题有哪些