我有一个C++应用程序,我想测量它在ARM板上的性能.董事会正在运行ubuntu.
目前我正在考虑valgrind和gprof来衡量绩效.
我应该使用哪些工具/技术来衡量绩效?
我在Linux中有一个二进制文件,我想知道它编译的函数是什么.
我的项目包含几个目标文件,每个目标文件包含不同的功能.有时我不知道我用哪些编译可执行文件.我怎么知道?
我正在使用不同架构的工具链进行编译(arm,mips ......).
谢谢.
我正在使用BeagleBone,因为它没有内置的RTC和备用电池,所以每次重启都会丢失日期.我可以使用命令轻松设置日期:
/ usr/bin/ntpdate -b -s -u pool.ntp.org
但是,如果电源熄灭并重新开始,那么时间就会消失.最新的beaglebone Angstrom linux发行版附带的解决方案是在每半小时更新一次crontab行.但我更愿意在通电时运行一次命令.
我尝试将上面列出的这个命令放在带有@reboot行的crontab中,但是我相信在配置网络之前就已经运行了,或者其他什么都失败了,因为它没有让我在正确的时间拉动电源5分钟然后放入它回到beaglebone.
有没有办法使用ifconfig或类似的东西,只有在网络可用后才能从init.d运行脚本?
我正在使用beaglebone使用sysfs接口从特定引脚访问数字输入.我可以改变输出状态而不是输入:(.我做的是,我有两个引脚pinA和pinB.pinA我做了输出而pinB我做了输入.将pinA连接到pinB.通过发送将pinA配置为输出引脚通过传入将sysf和pinB中的direction属性作为输入.然后我将PinA的值更改为1并将其作为输出给出1(我使用LED测试).但是当我读取PinB的值时,它仅给出0,即使我将0传递给pinA的值.可能是什么原因?
谢谢 :)
我尝试编写一个事件工作队列,但我遇到了一些问题。
我使用的是 Linux 2.6.36 内核。并且 DECLARE_WORK 函数从 3 个参数更改为 2 个。
问题是,旧的声明是
DECLARE_WORK (struct work_struct name, void (*func)(void *), void *data);
Run Code Online (Sandbox Code Playgroud)
而新的是
DECLARE_WORK (struct work_struct name, void (*func)(void *));
Run Code Online (Sandbox Code Playgroud)
我认为 void *data 指针是给 func 参数。那正确吗?我如何使用新版本的 DECLARE_WORK 做到这一点?
谢谢您的帮助
彼得
我的问题是:如何构建像Raspberry Pi这样的单板计算机来运行操作系统?
用户ARM微处理器和debian arm os,可以使用USB等
喜欢覆盆子pi和其他单板电脑
我搜索但找不到任何帮助我!:(
我正在阅读这里给出的文件capability.h
我不清楚如何在函数调用中使用符号| ~ &以及&~它们在做什么
使用|以下函数调用:
static inline kernel_cap_t cap_combine(const kernel_cap_t a,
const kernel_cap_t b)
{
kernel_cap_t dest;
CAP_BOP_ALL(dest, a, b, |);
return dest;
}
Run Code Online (Sandbox Code Playgroud)
使用&以下系统调用:
static inline kernel_cap_t cap_intersect(const kernel_cap_t a,
const kernel_cap_t b)
{
kernel_cap_t dest;
CAP_BOP_ALL(dest, a, b, &);
return dest;
}
Run Code Online (Sandbox Code Playgroud)
使用&~以下功能:
static inline kernel_cap_t cap_drop(const kernel_cap_t a,
const kernel_cap_t drop)
{
kernel_cap_t dest;
CAP_BOP_ALL(dest, a, drop, &~);
return dest;
}
Run Code Online (Sandbox Code Playgroud)
使用~以下功能:
static …Run Code Online (Sandbox Code Playgroud) 这是我对开放阅读/写作文件的理解.
在应用程序层,我可以调用该fopen()函数.
该fwrite()函数将调用系统调用open().
操作系统收到open()呼叫后,会将命令传递给VFS(虚拟文件系统).
VFS查找文件名,包括所需的任何目录,并进行必要的访问检查.
如果这是在RAM缓存中,则不需要磁盘访问.如果没有,VFS会向特定文件系统发送一个读取请求,该请求可能是EXT4.
然后,EXT4文件系统驱动程序将确定该目录所在的磁盘块.然后它将向磁盘设备驱动程序发送读取命令.
所以现在让我说我想读一个连接到主板的i2c设备A. 文件目录是/ dev/i2c/A.
所有设备都有一个主要编号吗?例如,Linux OS将180设置为USB的主要编号.那么在设备方面,每个USB设备中是否有一个主要的数字180?
如果第一个问题的答案为否,那么Linux操作系统如何确定哪种类型的设备A,它只是根据文件目录?
我认为第二个问题的答案可能是:在启动初始化阶段,有一些代码已经使用export()之类的东西将该端口挂载到文件系统?事实上,在启动阶段之后,文件目录/ dev/i2c/A就存在,并且它与i2c设备的主要编号绑定.因此,当我想打开dev/i2c/A时,OS会为我找到合适的i2c驱动程序,而不是SPI或USB驱动程序.我不确定这部分,我需要更多相关信息.
在启动阶段后立即将设备安装到文件系统时会发生上述情况.那么如果我有一个usb会发生什么,在插入后,如何将这个usb安装到具有正确的主号码180的文件系统?我想在安装阶段开始之前插入usb时会有一个irq?
我想在linux中使用定时器中断来做软件wathdog定时器.我怎样才能在linux中生成定时器中断?
我有这个代码来复制一个整数:
int parseInt(const char* data, unsigned int* ind) {
int i;
std::copy(&data[*ind], &data[*ind+sizeof(int)], &i); // i) STD::COPY
// memcpy(&i, &data[*ind], sizeof(int)); // ii) MEMCPY
std::cout << "--> " << i << std::endl;
*ind += sizeof(int);
std::cout << "OK" << std::endl;
return i;
}
Run Code Online (Sandbox Code Playgroud)
在debian这段代码工作没有有问题的我)的std :: COPY.
然后,我编译并运行嵌入式Arm上的代码(sizeof(int)也是4).带有i)的代码似乎也在运行,在函数内打印预期.
但是,从函数返回时会导致问题.
我也试过return 1;而不是i,但同样的.它没有抛出异常,也没有给出任何线索.我无法调试,因为我无法添加调试器,因为我有限制.
它只是在这个功能之后才会继续,即:
std::cout << "PARSING..." << std::endl;
parseInt(data, &ind);
std::cout << "PARSED!" << std::endl;
... …Run Code Online (Sandbox Code Playgroud) embedded-linux ×10
linux ×4
embedded ×3
linux-kernel ×3
arm ×2
beagleboard ×2
c ×2
c++ ×2
clock ×1
gpio ×1
ntp ×1
performance ×1
posix ×1
sysfs ×1
ubuntu-11.10 ×1