RTEMS 的 MINI2440 QEMU 移植之bsp_libc_init与 rtems_libio_init

2023-10-06 22:08

本文主要是介绍RTEMS 的 MINI2440 QEMU 移植之bsp_libc_init与 rtems_libio_init,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这段时间疯子一样的做RTEMS的移植,一直未果,遇到如下问题。

1.  bsp_libc_init 问题,执行之前

  gdb  调试信息

ricky@ricky-laptop:~/rtems/rtems-4.9.5/examples-4.9.5/hello_world_c$ arm-rtems4.9-gdb o-optimize/hello.exe

GNU gdb 6.8

Copyright (C) 2008 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law. Type "show copying"

and "show warranty" for details.

This GDB was configured as "--host=x86_64-unknown-linux-gnu --target=arm-rtems4.9"...

(gdb) target remote :1234

Remote debugging using :1234

[New Thread 1]

0x30000000 in arm_reset_vect ()

(gdb) load

Loading section .text, size 0xe1d0 lma 0x30000100

Loading section .init, size 0x20 lma 0x3000e2d0

Loading section .jcr, size 0x4 lma 0x3000e2f0

Loading section .fini, size 0x1c lma 0x3000e2f4

Loading section .rodata, size 0xb08 lma 0x3000e310

Loading section .ctors, size 0x8 lma 0x3000ee18

Loading section .dtors, size 0x8 lma 0x3000ee20

Loading section .eh_frame, size 0x4 lma 0x3000ee28

Loading section .data, size 0xb18 lma 0x3000ee2c

Start address 0x30000100, load size 63556

Transfer rate: 12413 KB/sec, 1629 bytes/write.

(gdb) b bsp_libc_init

Breakpoint 1 at 0x30001104: file /home/ricky/rtems/rtems-4.9.5/rtems-4.9/c/src/lib/libbsp/arm/mini2440/../../shared/bsplibc.c, line 20.

(gdb) c

Continuing.

Breakpoint 1, bsp_libc_init (heap_start=0x3001bfa0, heap_size=66994272, sbrk_amount=0) at /home/ricky/rtems/rtems-4.9.5/rtems-4.9/c/src/lib/libbsp/arm/mini2440/../../shared/bsplibc.c:20

20 RTEMS_Malloc_Initialize( heap_start, heap_size, sbrk_amount );

(gdb) 

执行结果

ricky@ricky-laptop:~/rtems/rtems-4.9.5/examples-4.9.5/hello_world_c$ sh qemu.sh 

S3C: CLK=240 HCLK=240 PCLK=240 UCLK=57

QEMU: ee24c08_init

DM9000: INIT QEMU MAC : 52:54:00:12:34:56

QEMU mini2440_reset: loaded kernel o-optimize/hello.exe at 0x30000000

S3C: CLK=240 HCLK=60 PCLK=30 UCLK=57

S3C: CLK=400 HCLK=100 PCLK=50 UCLK=57

2.  bsp_libc_init 问题,执行之后

gdb 调试信息
ricky@ricky-laptop:~/rtems/rtems-4.9.5/examples-4.9.5/hello_world_c$ arm-rtems4.9-gdb o-optimize/hello.exe 
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-unknown-linux-gnu --target=arm-rtems4.9"...
(gdb) target remote :1234
Remote debugging using :1234
[New Thread 1]
0x30000000 in arm_reset_vect ()
(gdb) load
Loading section .text, size 0xe1d0 lma 0x30000100
Loading section .init, size 0x20 lma 0x3000e2d0
Loading section .jcr, size 0x4 lma 0x3000e2f0
Loading section .fini, size 0x1c lma 0x3000e2f4
Loading section .rodata, size 0xb08 lma 0x3000e310
Loading section .ctors, size 0x8 lma 0x3000ee18
Loading section .dtors, size 0x8 lma 0x3000ee20
Loading section .eh_frame, size 0x4 lma 0x3000ee28
Loading section .data, size 0xb18 lma 0x3000ee2c
Start address 0x30000100, load size 63556
Transfer rate: 12413 KB/sec, 1629 bytes/write.
(gdb) b bsp_libc_init
Breakpoint 1 at 0x30001104: file /home/ricky/rtems/rtems-4.9.5/rtems-4.9/c/src/lib/libbsp/arm/mini2440/../../shared/bsplibc.c, line 20.
(gdb) c
Continuing.
Breakpoint 1, bsp_libc_init ( heap_start=0x3001bfa0, heap_size=66994272 , sbrk_amount=0) at /home/ricky/rtems/rtems-4.9.5/rtems-4.9/c/src/lib/libbsp/arm/mini2440/../../shared/bsplibc.c:20
20    RTEMS_Malloc_Initialize( heap_start, heap_size, sbrk_amount );
(gdb) n
执行结果

ricky@ricky-laptop:~/rtems/rtems-4.9.5/examples-4.9.5/hello_world_c$ sh qemu.sh 
S3C: CLK=240 HCLK=240 PCLK=240 UCLK=57
QEMU: ee24c08_init
DM9000: INIT QEMU MAC : 52:54:00:12:34:56
QEMU mini2440_reset: loaded kernel o-optimize/hello.exe at 0x30000000
S3C: CLK=240 HCLK=60 PCLK=30 UCLK=57
S3C: CLK=400 HCLK=100 PCLK=50 UCLK=57
INSN_LDR
data_abort at address 0x30001544, instruction: 0x1593F000,   spsr = 0x200001D3
active thread thread 0x09010001
Previous sp=0x30013384 lr=0x30001548 and actual cpsr=600001D7
 0xEAFFFFFE 0xEAFFFFFE 0xEAFFFFFE 0x30001108 0x30000428 0x3000022C
 0xC3000001 0x42000000 0x725F5053 0x736D6574 0x7172695F 0x676E6D5F
 0x6E695F74 0x00007469 0x3E000000 0x02000000 0x019B6A00 0x00017F00
 0x00011C00 0x65747200 0x695F736D 0x6D5F7172 0x5F74676E 0x74696E69
 0x00015E00 0x66656400 0x746C7561 0x746E695F 0x6E61685F 0x72656C64
 0x00000000 0x00002000 0x91000200 0x1D00019E 0xC8000001 0x62000000
 0x6C5F7073 0x5F636269 0x74696E69 0x00000000 0x00002F00 0xAE000200
 0xF400019F 0xBB000000 0x6C000000 0x68636269 0x735F7069 0x61697265

 

 

3. 只有simple_main是可以用的,说明了什么呢。


 

有做了些测试,发现 disable itron以后,可以用simple_main, 能说明什么问题呢?

 

ricky@ricky-laptop:~/rtems/rtems-4.9.5/examples-4.9.5/simple_main$ sh qemu.sh 

S3C: CLK=240 HCLK=240 PCLK=240 UCLK=57

QEMU: ee24c08_init

DM9000: INIT QEMU MAC : 52:54:00:12:34:56

QEMU mini2440_reset: loaded kernel o-optimize/simple_main.exe at 0x30000000

S3C: CLK=240 HCLK=60 PCLK=30 UCLK=57

S3C: CLK=400 HCLK=100 PCLK=50 UCLK=57

 

 

*** HELLO WORLD TEST ***

Hello World

*** END OF HELLO WORLD TEST ***

 

这篇关于RTEMS 的 MINI2440 QEMU 移植之bsp_libc_init与 rtems_libio_init的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/154172

相关文章

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

Linux 云计算底层技术之一文读懂 Qemu 架构

Qemu 架构概览 Qemu 是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和硬件打交道,但其实是和 Qemu 模拟出来的硬件打交道,Qemu 将这些指令转译给真正的硬件。 正因为 Qemu 是纯软件实现的,所有的指令都要经 Qemu 过一手,性能非常低,所以,在生产环境中,大多数的做法都是配合 KVM 来完成

RT-Thread(Nano版本)的快速移植(基于NUCLEO-F446RE)

目录 概述 1 RT-Thread 1.1 RT-Thread的版本  1.2 认识Nano版本 2 STM32F446U上移植RT-Thread  2.1 STM32Cube创建工程 2.2 移植RT-Thread 2.2.1 安装RT-Thread Packet  2.2.2 加载RT-Thread 2.2.3 匹配相关接口 2.2.3.1 初次编译代码  2.2.3.

QEMU用户模式测试AARCH64程序

QEMU的两种模式 QEMU(快速模拟器)是一个开源的机器模拟器和虚拟化器,它能够模拟多种处理器架构,并且可以在不同平台上运行。QEMU 支持两种模式:用户模式和系统模式。 用户模式(User Mode): 用户模式下的 QEMU 仅模拟用户空间的二进制执行环境,不模拟底层硬件。这种模式下,QEMU 可以运行不同架构编译的二进制程序,而不需要这些程序与宿主机的架构相匹配。用户模式通常用于测试和

4.15 版本内核调用 init_timer()函数出错

linux/include/linux/timer.h4.15 之前版本struct timer_list {14 /*15 * All fields that change during normal runtime grouped to the16 * same cacheline17 */18 struct hl

Python方法:__init__,__new__,__class__的使用详解

转自:https://blog.csdn.net/qq_26442553/article/details/82464682 因为python中所有类默认继承object类。而object类提供了了很多原始的内建属性和方法,所以用户自定义的类在Python中也会继承这些内建属性。可以使用dir()函数可以查看,虽然python提供了很多内建属性但实际开发中常用的不多。而很多系统提供的内建属性实际

Patlibc———更快捷的更换libc

起初是为了简化做pwn题目时,来回更换libc的麻烦,为了简化命令,弄了一个小脚本,可以加入到/usr/local/bin中,当作一个快捷指令🔢 这个写在了tools库(git clone https://github.com/CH13hh/tools.github.io )里面,如果有需要的话,可以随时下载,也可以提出一些优化 patlibc 安装与使用 patlibc 是一个用于简便替

ubuntu22.04 qemu 安装windows on arm虚拟机

ubuntu22.04 qemu 安装windows on arm虚拟机 iso: https://uupdump.net/ https://massgrave.dev/windows_arm_links vivo driver: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/

libmad音频解码库-Linux交叉编译移植

下载并解压libmad-0.15.1b.tar.gz 下载链接:https://downloads.sourceforge.net/mad/libmad-0.15.1b.tar.gz $tar -xvf libmad-0.15.1b.tar.gz$cd libmad-0.15.1b 1、先执行下面的命令:这条命令是为了适配高版本的gcc,因为高版本的gcc已经将-fforce-mem去除了:

arm linux lua移植

lua: lua home 1.下载lua源码 lua下载 lua-5.3.4.tar.gz 2.解压: tar xvf lua-5.3.4.tar.gz 3.修改makefile and luaconf.h $修改 lua-5.3.4/Makefile #INSTALL_TOP= /usr/local INSTALL_TOP= $(shell pwd)/out #修改安装目录(当前目录/o