草庐IT

flutterBuildDebugandroid-arm

全部标签

使用arm-none-eabi-gcc编译和链接库liba.a报错

我正在64位Linux机器上用C编译一个helloworld程序。我正在使用GCCARM嵌入式工具链在配备ATMELAT91SAM9G20处理器的FOXG20V板上交叉编译我的程序。第一次编译时,我遇到了一些错误,因为程序无法识别printf、return等函数(标准C函数)。所以我决定通过执行arm-none-eabi-gcc-ohellohello.c来建立函数之间的链接,我认为这些函数是在libc.a库中定义的(如果我错了请纠正我)libc.a但是结果还是报错:libc.a(lib_a-exit.o):Infunction`exit':exit.c:(.text.exit+0x1

c - 模拟ARM代码

我想模拟ARM代码。例如,我想运行这样的代码:MOVR0,#5ADDR0,R0,#1//somehowoutputR0它会在我的Ubuntu上的某些软件上输出6。可能吗? 最佳答案 KeilMDK可以用来模拟ARM代码。它提供了一个Simulate/Debug可用于探测ARM寄存器集、内存内容等的透视图...MDK-Lite评估版免费提供,最大代码大小为32KB。MDK的Linux版本不可用。但是KeilMDK在WINE上工作得很好在Ubuntu中。在WINE上安装KeiluVisionMDK:第一步:在Ubuntu上安装wine打

c - 模拟ARM代码

我想模拟ARM代码。例如,我想运行这样的代码:MOVR0,#5ADDR0,R0,#1//somehowoutputR0它会在我的Ubuntu上的某些软件上输出6。可能吗? 最佳答案 KeilMDK可以用来模拟ARM代码。它提供了一个Simulate/Debug可用于探测ARM寄存器集、内存内容等的透视图...MDK-Lite评估版免费提供,最大代码大小为32KB。MDK的Linux版本不可用。但是KeilMDK在WINE上工作得很好在Ubuntu中。在WINE上安装KeiluVisionMDK:第一步:在Ubuntu上安装wine打

linux - 为 x86 和 ARM 编写平台设备驱动程序的区别

我之前从事ARM特定平台驱动程序的工作,最近转向基于IntelAtom的驱动程序。在ARM上,它曾经有arch/arm/boot/dts/xx.dts和arch/arm/mach-xx/用于添加平台设备。我在x86上看不到这些文件或文件夹。当我进入arch/x86/...时,没有dts文件或平台文件。如果我想将我的平台设备添加到英特尔凌动平台中,我该如何添加我的平台设备信息?我在哪里可以获得特定于x86的dts文件(假设即使dts不特定于任何体系结构)? 最佳答案 有两项新功能可让您同时拥有一个适用于x86和ARM世界的驱动程序。首

linux - 为 x86 和 ARM 编写平台设备驱动程序的区别

我之前从事ARM特定平台驱动程序的工作,最近转向基于IntelAtom的驱动程序。在ARM上,它曾经有arch/arm/boot/dts/xx.dts和arch/arm/mach-xx/用于添加平台设备。我在x86上看不到这些文件或文件夹。当我进入arch/x86/...时,没有dts文件或平台文件。如果我想将我的平台设备添加到英特尔凌动平台中,我该如何添加我的平台设备信息?我在哪里可以获得特定于x86的dts文件(假设即使dts不特定于任何体系结构)? 最佳答案 有两项新功能可让您同时拥有一个适用于x86和ARM世界的驱动程序。首

linux - 旧的 ARM32 二进制文件可以在 AARCH64 内核上运行吗?

我很好奇在AARCH64-Linux机器上运行旧的ARM32-Linux程序的可行性,我做了一些实验:编写程序“Hello,World!”并使用arm-none-linux-gnueabi-gcc和aarch64-linux-gnu-gcc对其进行静态编译。使用busybox和aarch64编译器静态构建和创建ramdisk。将2“Hello,World!”程序(在ARM32和AARCH64中)到ramdisk。使用vexpress_defconfig和aarch64编译器构建一个简单的AARCH64-Linux内核。使用qemu-system-aarch64运行内核和ramdisk。

linux - 旧的 ARM32 二进制文件可以在 AARCH64 内核上运行吗?

我很好奇在AARCH64-Linux机器上运行旧的ARM32-Linux程序的可行性,我做了一些实验:编写程序“Hello,World!”并使用arm-none-linux-gnueabi-gcc和aarch64-linux-gnu-gcc对其进行静态编译。使用busybox和aarch64编译器静态构建和创建ramdisk。将2“Hello,World!”程序(在ARM32和AARCH64中)到ramdisk。使用vexpress_defconfig和aarch64编译器构建一个简单的AARCH64-Linux内核。使用qemu-system-aarch64运行内核和ramdisk。

linux - 如何在 Linux 2.6.35 上从用户模式清除和使 ARM v7 处理器缓存失效

我尝试为指令行清除和使ARMv7处理器缓存无效,因为指令代码可能会在执行过程中发生变化。为了达到效果,我尝试了两种变体。他们在这里:我使用了GCC__clear_cache()函数,但它没有给出所需的结果。缓存中的指令代码没有改变。我查找了GCC的源代码并找到了uclinux-eabi.h文件,我在其中找到了下一个用于清除缓存的代码:/*Cleartheinstructioncachefrom`beg'to`end'.ThismakesaninlinesystemcalltoSYS_cacheflush.*/#undefCLEAR_INSN_CACHE#defineCLEAR_INSN

linux - 如何在 Linux 2.6.35 上从用户模式清除和使 ARM v7 处理器缓存失效

我尝试为指令行清除和使ARMv7处理器缓存无效,因为指令代码可能会在执行过程中发生变化。为了达到效果,我尝试了两种变体。他们在这里:我使用了GCC__clear_cache()函数,但它没有给出所需的结果。缓存中的指令代码没有改变。我查找了GCC的源代码并找到了uclinux-eabi.h文件,我在其中找到了下一个用于清除缓存的代码:/*Cleartheinstructioncachefrom`beg'to`end'.ThismakesaninlinesystemcalltoSYS_cacheflush.*/#undefCLEAR_INSN_CACHE#defineCLEAR_INSN

linux - 'BL' arm指令反汇编如何工作?

'bl'或带有链接指令的分支几乎总是变成0xebfffffe但是,处理器和GNUbinutilsobjdump以某种方式知道分支位置:00000000:0:e1a0c00dmovip,sp4:e92ddff0push{r4,r5,r6,r7,r8,r9,sl,fp,ip,lr,pc}8:e24cb004subfp,ip,#4c:e24dd038subsp,sp,#56;0x3810:ebfffffebl014:e59f0640ldrr0,[pc,#1600];65c18:ebfffffebl74他们怎么知道的? 最佳答案 问题是由于