Articles of arm

使用可加载的内核模块修改framebuffer(/ dev / graphics / fb0)参数

问题:我必须configurationAndroid平台使用的各种LCD显示器。 几乎在所有情况下都没有关于液晶显示器的免费电气规格。 但是通过经验和逆向工程,参数可以被合理地猜测出来。 我正在尝试使用可加载的内核模块来微调显示参数(任何其他build议也欢迎)。 请在下面find相关信息。 硬件:爱特梅尔SAMA5D31-EK(ARM 5处理器) SW: Andriod Linux(目标),Ubuntu(主机系统),Sourcery CodeBench(交叉编译器)代码片段,从board-dt.c文件 static struct fb_videomode at91_tft_vga_modes[] = { ….. .xres =435; .yres =235; …. } static struct fb_monspecs at91fb_default_monspecs = { ……… .modedb = at91_tft_vga_modes, …… } static struct atmel_lcd_fb_info __initdata ek_lcdc_data = { ………. .default_monspecs = & at91fb_default_monspecs; ……… } 我添加了这个代码,所以可加载的内核模块可以访问lcdc_data结构 extern void set_fb_video(struct fb_videomode […]

用mySQL触发器调用外部脚本在ubuntu ARMHF上WHITOUT sys_exec

我需要从触发器中调用外部脚本来拦截数据库中的每个插入。 这是因为我不能轮询这个值,我正在编写一个ARM体系结构的embedded式系统,只有250MB的RAM。 触发器是正确的选项,并且触发器的代码工作正常,我得到: FUNCTION mydb.sys_exec does not exist (MySQL error code: 1305, SQLState: 42000 ) 所以我试图安装这个: https : //github.com/mysqludf/lib_mysqludf_sys 但它让我: ERROR: You need libmysqlclient development software installed to be able to compile this UDF, on Debian/Ubuntu just run: apt-get install libmysqlclient15-dev 所以如果我input sudo apt-get install libmysqlclient15-dev 我得到:请注意,select“libmysqlclient-dev”而不是“libmysqlclient15-dev” 当然这不是正确的包,因为它不工作。 包含在git中的.so文件是为intelx86编译的。 任何人有一个想法? 在git中编译.c是很不可能的,因为缺less依赖关系。 或者..我怎样才能执行外部脚本从一个触发器没有sys_exec? PS:为了完整性,这是触发器脚本: DELIMITER @@ […]

在“分叉”进程的同时,为什么Linux内核为每个新创build的进程拷贝内核页表的内容呢?

以下讨论适用于32位ARM Linux内核。 我注意到,在分叉过程中,Linux内核将内核页表(master page table,即swapper_pg_dir )的内容复制到每个新创build进程的页表中。 问题是: 为什么打扰呢? 为什么不能为每个新创build的进程共享单个内核页表副本(关于32位ARM Linux的更高的1G部分),而不是memcpy交换页表? 这是浪费内存吗? 相关源代码(“ – >”代表函数调用): do_fork – > copy_process – > copy_mm – > dup_mm – > mm_init – > mm_alloc_pgd – > pgd_alloc – > /* * Copy over the kernel and IO PGD entries */ init_pgd = pgd_offset_k(0); memcpy(new_pgd + USER_PTRS_PER_PGD, init_pgd + USER_PTRS_PER_PGD, […]

在Android上安装预构build二进制文件:“not found”

我试图在一个自定义的Android图像中安装一个预编译的二进制文件。 为此,我已经将它复制到prebuilt/android-arm/目录下的一个新目录中,并使用类似下面的Android.mk文件: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := binary_name LOCAL_MODULE := binary_name LOCAL_MODULE_CLASS := EXECUTABLES include $(BUILD_PREBUILT) 因此,如果我运行make system_image binary_name ,则二进制文件将被复制到系统映像中的/bin/ 。 如果我运行模拟器,我可以在/system/bin看到二进制文件。 权限与其他可执行文件( -rwxr-xr-x )相同,根据file ,这是一个ARM二进制文件( ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped )。 但是当我在模拟器上运行它时,它说: # binary_name binary_name: not found 我已经把它,这是我可以看到: # strace binary_name execve("/system/bin/binary_name", […]

使用objdump进行ARM体系结构:反汇编到ARM

我有一个对象文件,并试图反汇编它。 当我使用: objdump -d example.o 我以elf64-x86-64的文件格式获得代码集。 我试图把这个反汇编成ARM,我该怎么做呢?

ARM中的Linux进程上下文和SVC调用

根据一些Linux书籍 服务由用户应用程序发出的系统调用的内核代码代表相应的应用程序进程运行,并被称为在进程上下文中执行。 中断处理程序在中断上下文中运行。 现在svc和irq是两个例外。 所以当linux正在处理svc时,它在进程上下文中,而在处理irq的时候,它在中断上下文中。 这是如何映射的? 只是一个编辑 在书籍中也提到,当工作队列在进程上下文中运行时,tasklets / softirqs在中断上下文中运行。 那么这是否意味着tasklet将在CPSR.mode = IRQ中运行?

ARM性能计数器与Linux的clock_gettime

我在开发板(ZC702)上使用了一个Zynq芯片,该芯片有一个667MHz的双Cortex-A9 MPCore,并带有一个Linux内核3.3。我想比较一个程序的执行时间,所以首先使用clock_gettime,然后使用计数器由ARM的协处理器提供。 计数器每增加一个处理器周期。 (基于这个问题的stackoverflow和这个 ) 我用-O0标志编译程序(因为我不想要重新sorting或优化) 我用性能计数器测量的时间是583833498(周期)/ 666.666687 MHz = 875750.221 (微秒) 在使用clock_gettime()(REALTIME或MONOTONIC或MONOTONIC_RAW )时,测量的时间为: 731627.126 (微秒),这个时间less了150000微秒。 有谁能解释我为什么会这样呢? 为什么有差异? 处理器没有时钟规模,如何通过clock_gettime获得更less的执行时间? 我有一个示例代码如下: #define RUNS 50000000 #define BENCHMARK(val) \ __asm__ __volatile__("mov r4, %1\n\t" \ "mov r5, #0\n\t" \ "1:\n\t"\ "add r5,r5,r4\n\t"\ "mov r4 ,r4 \n\t" \ "mov r4 ,r4 \n\t" \ "mov r4 ,r4 \n\t" \ "mov r4 […]

WebRTCarmbuild设

我想用arm926ej-s处理器为我的小机器构buildwebrtc。 我安装depot_tools后,我做了以下步骤: gclient config http://webrtc.googlecode.com/svn/trunk gclient sync –force cd trunk ninja -C out/Debug 所有工作正常,我可以运行一些二进制文件,我编译后得到。 现在,我想为我的arm机器编译。 我做了如下: rm -rf out export GYP_CROSSCOMPILE=1 export GYP_DEFINES="target_arch=arm arm_float_abi=hard" export CC=/path/to/my/gcc export CXX=/path/to/my/g++ export AR=/path/to/my/ar export CC_host=gcc export CXX_host=g++ gclient runhooks –force 仍然顺利… 但是当我尝试用命令编译它时: ninja -C out/Debug 我得到了很多错误,比如: CC obj/chromium/src/third_par…p/srtp/crypto/cipher/libsrtp.aes_cbc.o FAILED: /opt/virt2real-sdk/codesourcery/arm-2013.05/bin/arm-none-linux-gnueabi-gcc -MMD -MF obj/chromium/src/third_party/libsrtp/srtp/crypto/cipher/libsrtp.aes_cbc.od -DHAVE_STDLIB_H -DHAVE_STRING_H -DV8_DEPRECATION_WARNINGS -D_FILE_OFFSET_BITS=64 -DHAVE_INT16_T […]

尝试执行文件时出现“sh:./ <file> not found”错误

我遇到了我见过的最奇怪的问题。 我在Linux上交叉编译ARM CPU的应用程序。 我正在使用buildroot ,并一切顺利,直到我试图在目标上运行应用程序:我得到-sh: ./hw: not found 。 例如: $ cat /tmp/test.cpp #include <cstdio> #include <vector> int main(int argc, char** argv){ printf("Hello Kitty!\n"); return 0; } $ ./arm-linux-g++ -march=armv7-a /tmp/test.cpp -o /tftpboot/hw 将可执行文件加载到目标; 然后在目标上发布: # ./hw -sh: ./hw: Permission denied # chmod +x ./hw # ./hw -sh: ./hw: not found # ls -l ./hw […]

在Linux ARM上运行Android的ARM二进制文件

在其他具有Linux的ARM设备(如Raspberry Pi)上运行为Android(而不是.apk)构build的ARM二进制文件是可能的? 我试图在ARM上移植我的一个项目,但是我需要使用仅适用于x86(Windows和Linux)和(最近)的Android设备的闭源二进制(SopCast)。 运行file sopclient显示ELF的32位LSB可执行文件,ARM版本1(SYSV),dynamic链接(使用共享库),剥离,但是sh sopclient说只是不能执行二进制文件 (是的,我chmoded + x之前)。 “经典”的ARM Linux内核和Android-Linux之间有什么明显的区别吗?