arm体系架构与实践第9章习题
实验9-1
解释每一条语句的含义
实验9-2
使用链接脚本中的地址
如果想使用链接脚本中的标识需要使用
- 数组:标识一定是第一个参数的地址,也就是链接脚本中的地址
- 指针:标识会是地址的内容(指令),而标识的地址才是链接脚本中地址
示例:
但是如果是数组
结果是:
所以如果想用链接脚本中的标识需要使用数组的声明方式
实现打印函数
实现不定长的参数函数调用
- 首先需要改变Makefile中的参数
-nostdinc:开启后不会主动去寻找系统头文件的路径
由于需要使用到 stdarg.h 所以需要将这个参数删除
2. 实现printk
实现对应的uart的函数
输出十进制
实现输出十六进制
输出实现
9-3
链接脚本:
- 注意text段和rodata段的对齐,否则后续搬移代码的时候会出问题
- 19行将text放置到0x90000处,但是链接的地址是按照text_boot后面的位置来的。
- 26行:rodata会默认放置在text的加载地址的后面(0x90xxx),但是kernel中有字符串常量,字符串常量在rodata段中,但是后续搬移如果不搬移rodata段的话,这个字符串就无法正常打印,所以可以直接再链接脚本中将rodata段的加载地址设置在原本的链接地址上。
boot.S
678设置需要拷贝的地址
9-13进行逐8字节拷贝,从0x90000拷贝到text的链接地址
__EOF__

本文作者:alan
本文链接:https://www.cnblogs.com/alanli07/p/18493506.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/alanli07/p/18493506.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体