共2条
1/1 1 跳转至页
uclinux,nor,flash 如何把uclinux拿到nor flash中运行?
问
我现在想把uclinux拿到nor flash中运行,重新编译了uclinux,指定从rom运行,并设定好ram以及flash的大小,其实地址等。然后通过flashdown_net程序把得到linux映象文件(intel hex32格式)写道nor flash中的指定位置。
现在我想在ZLG_BOOT中跳转到uclinux的起始地址,但是看了ZLG_BOOT的代码,怎么找不到跳转指令呢?ZLG_BOOT的源代码中的Reset()是在哪里定义的?
该如何实现跳转呢?
另外,我这种做法正确否?现在也是在摸索着来,希望得到您的指点
我用的开发板是magicARM2200 答 1: 仔细看Boot.c和Boot_a.s 仔细看Boot.c和Boot_a.s:
Start_Boot
MSR CPSR_c, #(NoInt | ABT32Mode) ; 切换到取数据中止模式
LDR SP, =Regs
LDMFD SP!, {R3}
MSR SPSR_cxsf, R3
MOV R1, SP
MSR CPSR_c, #(NoInt | SYS32Mode) ; 切换到SYS模式
LDMFD R1!, {SP, LR} ; 恢复UND模式SP, LR
MSR CPSR_c, #(NoInt | UND32Mode) ; 切换到UND模式
LDMFD R1!, {SP, LR} ; 恢复UND模式SP, LR
MSR CPSR_c, #(NoInt | SVC32Mode) ; 切换到SVC模式
LDMFD R1!, {SP, LR} ; 恢复SVC模式SP, LR
MSR CPSR_c, #(NoInt | IRQ32Mode) ; 切换到IRQ模式
LDMFD R1!, {SP, LR} ; 恢复IRQ模式SP, LR
MSR CPSR_c, #(NoInt | FIQ32Mode) ; 切换到FIQ模式
LDMFD R1!, {R8-LR} ; 恢复FIQ模式R8-LR
MSR CPSR_c, #(NoInt | ABT32Mode) ; 切换到取数据中止模式
MOV SP, R1
LDMFD SP, {R0-R15}^
最后一句就是跳转的指令!!!
还有,注意LDR SP, =Regs这句!!! 答 2: 明白您的意思恩。明白您的意思,就是通过设置pc指针实现的跳转?
bootloader程序是靠读取nandflash中的zlg_boot.ini,执行命令实现跳转的对把?
现在我修改了zlg_boot.ini,使他只有一条指令:set pc 0x80020000,地址0x80020000是我的uclinux内核在norflash中的起始地址。
启动的时候,bootloader判断有文件zlg_boot.ini,于是打印出3。start uclinux......选项,我选3,出现starting user program。。。。。
然后就没反应了。
我已经把重新编译的uclinux内核写入指定位置,并且已经校验没有问题。
请问应该如何把uclinux放入norflash执行呢?我的这种做法可行否?uclinux编译成rom运行是否还需要其他的设置?? 答 3: zlg您能指点一下么?周先生能否指点一下?? 答 4: 有run吗?set pc 0x80020000好了有run吗? 答 5: 有run有run,是否uclinux内核编译还需指定什么东西?
现在我想在ZLG_BOOT中跳转到uclinux的起始地址,但是看了ZLG_BOOT的代码,怎么找不到跳转指令呢?ZLG_BOOT的源代码中的Reset()是在哪里定义的?
该如何实现跳转呢?
另外,我这种做法正确否?现在也是在摸索着来,希望得到您的指点
我用的开发板是magicARM2200 答 1: 仔细看Boot.c和Boot_a.s 仔细看Boot.c和Boot_a.s:
Start_Boot
MSR CPSR_c, #(NoInt | ABT32Mode) ; 切换到取数据中止模式
LDR SP, =Regs
LDMFD SP!, {R3}
MSR SPSR_cxsf, R3
MOV R1, SP
MSR CPSR_c, #(NoInt | SYS32Mode) ; 切换到SYS模式
LDMFD R1!, {SP, LR} ; 恢复UND模式SP, LR
MSR CPSR_c, #(NoInt | UND32Mode) ; 切换到UND模式
LDMFD R1!, {SP, LR} ; 恢复UND模式SP, LR
MSR CPSR_c, #(NoInt | SVC32Mode) ; 切换到SVC模式
LDMFD R1!, {SP, LR} ; 恢复SVC模式SP, LR
MSR CPSR_c, #(NoInt | IRQ32Mode) ; 切换到IRQ模式
LDMFD R1!, {SP, LR} ; 恢复IRQ模式SP, LR
MSR CPSR_c, #(NoInt | FIQ32Mode) ; 切换到FIQ模式
LDMFD R1!, {R8-LR} ; 恢复FIQ模式R8-LR
MSR CPSR_c, #(NoInt | ABT32Mode) ; 切换到取数据中止模式
MOV SP, R1
LDMFD SP, {R0-R15}^
最后一句就是跳转的指令!!!
还有,注意LDR SP, =Regs这句!!! 答 2: 明白您的意思恩。明白您的意思,就是通过设置pc指针实现的跳转?
bootloader程序是靠读取nandflash中的zlg_boot.ini,执行命令实现跳转的对把?
现在我修改了zlg_boot.ini,使他只有一条指令:set pc 0x80020000,地址0x80020000是我的uclinux内核在norflash中的起始地址。
启动的时候,bootloader判断有文件zlg_boot.ini,于是打印出3。start uclinux......选项,我选3,出现starting user program。。。。。
然后就没反应了。
我已经把重新编译的uclinux内核写入指定位置,并且已经校验没有问题。
请问应该如何把uclinux放入norflash执行呢?我的这种做法可行否?uclinux编译成rom运行是否还需要其他的设置?? 答 3: zlg您能指点一下么?周先生能否指点一下?? 答 4: 有run吗?set pc 0x80020000好了有run吗? 答 5: 有run有run,是否uclinux内核编译还需指定什么东西?
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |