我试图在嵌入式Linux框中使用`dd'命令在VFAT分区上创建一个大的空文件:
dd if=/dev/zero of=/mnt/flash/file bs=1M count=1 seek=1023
Run Code Online (Sandbox Code Playgroud)
目的是跳过前1023个块并在文件末尾只写一个块,这在原生EXT3分区上应该非常快,而且确实如此.但是,此操作在VFAT分区上变得非常慢,并伴有以下消息:
lowmem_shrink:: nr_to_scan=128, gfp_mask=d0, other_free=6971, min_adj=16
// ... more `lowmem_shrink' messages
Run Code Online (Sandbox Code Playgroud)
另一种尝试是在VFAT分区上fopen()一个文件然后fseek()到最后写入数据,这也被证明是慢的,以及来自内核的相同消息.
基本上,有没有一种快速的方法在VFAT分区上创建文件(不遍历前1023块)?
谢谢.
我按照这篇文章打印堆栈跟踪如何在我的gcc C++应用程序崩溃时生成堆栈跟踪.它在x86 linux中运行良好.任何人都可以教我如何使它在arm-linux上运行?
我正在使用arm-linux-gcc 4.4.3.
[root@FriendlyARM /]# ./test1
Error: signal 11:
[0x0]
Run Code Online (Sandbox Code Playgroud)
在x86中
mickey@mickeyvm:~/Desktop/workspace/test/testCatchSeg/src$ ./test1
Error: signal 11:
./test1(_Z7handleri+0x19)[0x804876d]
[0xedd400]
./test1(_Z3bazv+0x10)[0x80487c2]
./test1(_Z3barv+0xb)[0x80487e1]
./test1(_Z3foov+0xb)[0x80487ee]
./test1(main+0x22)[0x8048812]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xe7)[0x84de37]
./test1[0x80486c1]
Run Code Online (Sandbox Code Playgroud)
这就是我为arm-linux编译的方法
arm-linux-g++ -g -rdynamic ./testCatchSeg.cpp -o testCatchSeg
Run Code Online (Sandbox Code Playgroud) 我遇到一些linux c代码的问题,它使用select,FD_ISSET,read等从ttyUSB端口读取.我的调制解调器使用FTDI串口转USB电缆进行输入.问题是拔下USB电缆时选择取消阻止.有没有办法阻止它这样做?
count = 0;
while ( g_running ) {
FD_ZERO(&readFdSet);
maxfd = 0;
numTransPorts = 0;
logger( DEBUG, "Begin g_running loop - %d", count );
for ( i = 0; i < MAX_CONFIG_PORTS; i++ ) {
if ( configPorts[i].commType == 1 && configPorts[i].pttyHost != NULL ) {
FD_SET( configPorts[i].pttyHost->fd, &readFdSet );
logger( DEBUG, "FD_SET - fd=%d, index=%d", configPorts[i].pttyHost->fd, i );
if ( configPorts[i].pttyHost->fd >= maxfd ) {
maxfd = configPorts[i].pttyHost->fd;
}
numTransPorts++;
}
}
maxfd++; // add one because …Run Code Online (Sandbox Code Playgroud) 我必须将我的GSM模块与基于ARM9的AM1808接口.
我已将所有GPIO引脚分配给Da850.c以及mux.h文件.我成功创建了一个uImage并将该图像插入到我的flash中.
我需要从User应用程序处理一些GPIO.
我知道我们可以从Kerel空间处理GPIO,但我需要从用户空间处理.
例如,我已经为GSM模块分配了GPIO电源键.我需要通过应用程序更改引脚装置(HIGH或LOW).
好的,我已经编写了以下代码来从用户空间访问它,
#include <stdio.h>
#include <time.h>
#include <signal.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <stdlib.h>
#include <unistd.h>
#include "GSMpwr.h"
#define BS_GSM_PWR_REGISTER 0x01E26014
#define BS_DCDS_MASK 0x00000004
int fd; // Memory device descriptor
unsigned long *pPWR;
unsigned short GetGSMpwr(void)
{
#if defined __HOST_ARM
unsigned long dcd_value = *pPWR;
return (pwr_value >> 7) & 0x01;
#endif
}
void InitializeGSMpwr(void)
{
#if defined __HOST_ARM
int page_size = getpagesize();
unsigned int MAP_addr;
unsigned int reg_addr;
unsigned char *pTemp; // Pointer to GSMpwr …Run Code Online (Sandbox Code Playgroud) 我试图将一个本地文件添加到mpd(通过mpc)并播放它.我的平台是OpenWRT嵌入式linux.
所以,从手册页中可以看出:
mpc add <file> Add a song to the current playlist
Run Code Online (Sandbox Code Playgroud)
如果我做:
root@OpenWrt:~/.mpd# mpc add /usr/share/baresip/ring.wav
error adding /usr/share/baresip/ring.wav: directory or file not found
Run Code Online (Sandbox Code Playgroud)
或者如果我这样做:
root@OpenWrt:~/.mpd# mpc add file:///usr/share/baresip/ring.wav
error adding file:///usr/share/baresip/ring.wav: Access denied
Run Code Online (Sandbox Code Playgroud)
这里的语法究竟是什么?对于mpc/mpd,手册页真的不太清楚.
我写了一个简单的字符设备驱动程序,并希望将其交叉编译为craneboard(ARM体系结构).我的文件名是gDev.c.我将文件复制到kernel/drivers/char了起重机源中的目录.我修改了Kconfig同一目录中的文件并添加了以下行.
config TEST_GCHARD
tristate "My Character driver"
default m
Run Code Online (Sandbox Code Playgroud)
我将以下行添加到同一目录中的Makefile中.
obj-$(CONFIG_TEST_GCHARD) += gDev.o
Run Code Online (Sandbox Code Playgroud)
我在am3517_crane_defconfigin arch/arm/configs目录中添加了以下行.
CONFIG_TEST_GCHARD=m
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我将它设置为m中am3517_crane_defconfig,是没有得到包括编译的文件.但是,如果我改变它y,它就会被编译.但是,我需要它成为一个模块,我必须insmod在启动后启动它.请指导我是否缺少任何步骤.谢谢.
我u-boot.bin和之间感到困惑uImage.bin.我想uImage.bin只是压缩版本,u-boot.bin它的大小应该小于u-boot.bin.但是在我的构建环境中,我发现的是u-boot.bin尺寸小于uImage.bin.
有谁能让我知道u-boot.bin和uImage.bin?之间有什么区别?
请有人举一个关于如何使用libnl来使用nl80211的简单示例.我试图通过新的源代码,但它很混乱.任何人都可以给出一个关于如何使用libnl触发nl80211命令(如NL80211_CMD_GET_WIPHY)的简单程序.
我首先要说的是,我不是该领域的专家,我的问题可能包含误解,在这种情况下,如果你纠正我并附上资源,我会很高兴,所以我可以了解更多细节.
我试图弄清楚系统总线的方式以及移动设备中出现的各种设备(如传感器芯片,wifi/BT SoC,触摸屏等)是如何被CPU(以及其他设备)处理的微控制器).
在PC世界中,我们有总线仲裁器将命令/数据路由到设备,并且,afaik,地址在板上硬连线(如果我错了,请纠正我).但是,在移动世界中,我没有找到任何类型寻址的证据; 我确实发现ARM已经标准化了高级微控制器总线架构,但我不知道,该标准是否适用于位于同一SoC(即Exynos,OMAP,Snapdragon等)内的组件(cpu-cores).或者也影响外围接口.具体来说,我问的是哪个组件负责为外围设备和MMIO地址分配地址?
一个更基本的问题是,在移动设备架构中是否存在总线管理,或者是否存在某种"星形"拓扑(以CPU为中心).
从这个问题我得到的印象是这些设备被视为平台设备,即直接连接到CPU而不是通过总线连接的设备.不过,我的问题是操作系统如何知道如何解决它们?然后其他线程,这个和这个有关平台的设备/驱动程序让我糊涂..
正如我们所知,分散列表收集了物理上分散在内存中的内存,但实际上是连续的.当与DMA通信时,它为DMA提供了一个抽象的内存视图,因为这是物理上连续的内存.
怎么scatterlist处理这个?它是一种保持在内的链表scatterlist吗?
例如,如果要使用DMA传输4000字节的数据,因为数据在物理上是连续的,分散列表如何使其连续?scatterlist实现将使用分配4000字节的数据Kmalloc来确保它获得物理上连续的内存?还是会创建一个链表?
注意:这里我的查询不是关于SG表,而是关于单个分散列表
让我们说我们想要保存4000字节物理上不连续的内存的数据
struct scatterlist sg,
sg_init_one(&sg,data,4000)
Run Code Online (Sandbox Code Playgroud)
现在,这个sg如何解决这个问题?
embedded-linux ×10
c ×4
linux ×4
arm ×3
embedded ×2
linux-kernel ×2
amba ×1
audio-player ×1
bash ×1
c++ ×1
dma ×1
driver ×1
file-io ×1
filesystems ×1
netlink ×1
u-boot ×1
usb ×1
wifi ×1