Articles of Linux操作系统

从ARM的源代码交叉编译Qt 4.7的问题

我试图从源代码交叉编译Qt 4.7.1,这里有一些关于我的设置的注释: 我的预期输出是为了运行Qt应用程序而需要存在的共享对象库。 我的目标平台是采用ARM Cortex-A8架构的TI AM335x处理器。 我的开发平台是x86 64位Ubuntu虚拟机 我对这个应该如何工作的理解是,我下载了我的目标平台(这是TI的Linaro工具链)的工具链,我下载了Qt 4.7.1的源代码,我设置了mkspec来使用我的工具链,运行configure ,那么只需要运行make / make install ,我应该能够find所有.so的地方,我告诉它安装到。 但是,我有很多问题让这个想法工作。 首先,我下载了TI SDK版本:ti-sdk-am335x-evm-06.00.00.00,其中arm工具位于: [root_install_dir]/linux-devkit/sysroots/i686-arago-linux/usr/bin 我更新了我的$PATH与该目录: mike @ mike-VirtualBox:〜$ echo $ PATH /home/mike/ti-sdk-am335x-evm-06.00.00.00/linux-devkit/sysroots/i686-arago-linux/usr/bin:/ usr / local / Trolltech /Qt-4.8.5/bin:/home/mike/bin:/usr/lib/lightdm/lightdm:/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin目录:/ bin中:在/ usr /游戏:/首页/麦克风/箱 然后我根据最接近的例子创build了自己的mkspec: cp […]

Linux中C ++应用程序的内存稳定性

我想validation我为Linux编写和编译的C ++应用程序的内存稳定性。 这是一个networking应用程序,以每秒10-20个连接的速度响应远程客户端连接。 从长远来看,内存是上升到50MB,尽pipe该应用程序正在打电话删除… 调查显示,Linux不会立即释放内存。 所以这是我的问题: 如何强制Linux释放我实际释放的内存? 至less我想这样做一次来validation内存的稳定性。 否则,有没有可靠的内存指示器可以报告内存我的应用程序实际上是持有?

为什么这个ptrace程序说系统调用返回-38?

除了我正在运行execl("/bin/ls", "ls", NULL);之外,它和这个一样execl("/bin/ls", "ls", NULL); 。 结果显然是错误的,因为每个系统调用返回-38 : [user@ test]# ./test_trace syscall 59 called with rdi(0), rsi(0), rdx(0) syscall 12 returned with -38 syscall 12 called with rdi(0), rsi(0), rdx(140737288485480) syscall 9 returned with -38 syscall 9 called with rdi(0), rsi(4096), rdx(3) syscall 9 returned with -38 syscall 9 called with rdi(0), rsi(4096), rdx(3) syscall […]

从接口名称查找IP地址

在Linux上,常见的接口名称看起来像eth0,eth1等。我知道如何使用gethostbyname或类似的函数来查找至less一个IP地址,但是我不知道用什么方法来指定我想要的IP地址。 我可以使用ifconfig和parsing输出,但为这个信息炮轰出现…不雅观。 有没有办法,例如枚举所有的接口及其IP地址(也可能是MAC地址)到一个集合? 或者至less有一些沿着gethostbyinterface("eth0") ?

GDB没有这样的文件或目录

我正在关注OpenSecurityTraining的这些经验教训。 我已经到了实验室,在那里我要用CMU炸弹训练自己。 他们提供了一个x86_64编译的CMU炸弹,你可以在这里find: CMU炸弹x86-64最初来自CMU实验室计算机系统:程序员的视angular(CS:APP)第一版 32位炸弹。 我有一个虚拟化的64位基本操作系统发行版,我可以毫不费力的使用GDB反汇编CMU Bomb。 现在,我有一个64位的Ubuntu 14.04 LTS(未虚拟化),当我试图重现为什么我做了我的基本操作系统,我得到了着名的错误。 我运行这些命令: gdb ./bomb-x64 (gdb) b main Breakpoint 1 at 0x400dbd: file bomb.c, line 37. — why bomb.c ? (gdb) r … bomb.c: no such file or directory 编辑:我可以在CMU炸弹的其他function上创build断点,并按预期工作。 例如: (gdb) b phase_1 Breakpoint 3 at 0x400f00 (gdb) r Breakpoint 1, 0x0000000000400f00 in phase_1 () (gdb) […]

/ proc / sys / kernel / sched_child_runs_first是否工作?

我知道在/proc/sys/kernel/sched_child_runs_first中设置一个非零值会强制subprocess在父进程之前运行。 不过,我认为这似乎没有奏效。 这是我的代码: #include <stdio.h> #include <sys/types.h> int main(int argc, char **argv) { pid_t child_pid; switch(child_pid = fork()) { case 0: printf("In Child\n"); exit(0); case -1: printf("Could not fork()\n"); default: printf("In parent\n"); } return 0; } 我得到的输出总是: In parent In Child 我在这里期待什么错吗? PS:我只是试着看看它是否有效,所以请不要提出其他的同步机制,或者为什么这是一个坏主意,等等。

docker:SSH直接访问容器

到目前为止,我们使用几个Linux用户: system_foo @服务器 system_bar @服务器 … 我们想把系统用户放到docker容器中。 linux用户system_foo – >容器system_foo 服务器内部的更改没有问题,但远程系统使用这些用户向我们发送数据。 我们需要让ssh system_foo@server工作。 远程系统不能改变。 如果每个Linux操作系统只有一个系统(通过端口22到容器),那么我会非常容易。 但有几个。 我们如何才能从旧的scheme更改为docker集装箱,并保持服务的ssh system_foo@server可用,而无需在远程站点的变化? 如果你不明白这个问题,请留下评论。 谢谢。

用acksearch多个模式(单词)?

我想在包含recursive directories和files的directory中search多个patterns 。 我知道grep命令如下 grep -e '(pattern1)|(pattern2)' 要么 grep -r -E 'string1|string2|string3' /var/www/http 对于使用ack或ag的命令是什么?

如何使用克隆系统调用分配新的TLS区域

问题的短版本:如果我想为我正在创build的线程分配一个新的TLS区域,则需要在x86_64 Linux系统上传递给clone系统调用的参数。 长版本 : 我正在研究一个研究项目,对于我正在做的一些尝试,我想用clone系统调用来创build线程,而不是使用pthread_create 。 不过,我也希望能够使用线程本地存储。 我现在不打算创build多个线程,所以我可以为我使用克隆系统调用创build的每个线程创build一个新的TLS区域。 我正在查看clone的手册页,它包含有关TLS参数标志的以下信息: CLONE_SETTLS (since Linux 2.5.32) The newtls argument is the new TLS (Thread Local Storage) descriptor. (See set_thread_area(2).) 于是我看了set_thread_area的手册页,注意到以下看起来很有希望的内容: When set_thread_area() is passed an entry_number of -1, it uses a free TLS entry. If set_thread_area() finds a free TLS entry, the value of u_info->entry_number is set upon […]

如何用QEMU和KGDBdebuggingLinux内核?

我已经能够使用以下方式启动一个基于powerpc的系统(MPC8544DS具体)来调用qemu(v1.7.0) qemu-system-ppc -M mpc8544ds -m 512 -kernel zImage -s -nographic -initrd busyboxfs.img -append "root=/dev/ram rdinit=/bin/sh kgdboc=ttyS0,115200 kgdbwait" 其中zImage是一个自定义交叉编译的Linux Kernel(v2.6.32),它已经启用并编译了KGDB(用于启动代码debugging),而busyboxfs.img是基于busybox的rootfs。 因为我使用-s标志到Qemu,所以我可以使用cross gdb插入到内核中,如下所示: (gdb) target remote localhost:1234 Remote debugging using localhost:1234 mem_serial_in (p=<value optimized out>, offset=5) at drivers/serial/8250.c:405 405 } 但是,如果我删除-s标志并试图通过/dev/ttyS0破解内核,它会给我一个权限被拒绝的错误: (gdb) set remotebaud 115200 (gdb) target remote /dev/ttyS0 permission denied 是因为它被Qemu所控制吗? 另外,在互联网上的例子中,kgdboc已经被设置为ttyAMA0 ,我已经理解了代表AMBA总线,这是基于ARM的系统特有的。 我们有类似的PowerPC吗? 我在这里做错了什么?