小编caf*_*caf的帖子

Linux中的系统调用机制存在疑问

我们使用'int'或新的'syscall/sysenter'指令从ring3转到ring0.这是否意味着需要为内核修改的页表和其他内容是由'int'指令自动完成的,或者'int 0x80'的中断处理程序将执行所需的操作并跳转到相应的系统调用.

此外,当从系统调用返回时,我们再次需要转到用户空间.为此,我们需要知道用户空间中的指令地址以继续用户应用程序.存储的地址在哪里.'ret'指令是否会自动将ring从ring3更改为ring0或者这种环更换机制在何处/如何进行?

然后,我读到从ring3变为ring0并不像从ring0变为ring3那样昂贵.为什么会这样?

谢谢,巴拉

linux x86 system-calls

3
推荐指数
1
解决办法
451
查看次数

撤消 git 中的更改

我犯了一个错误,我拉下了更改,然后关闭了文本编辑器并保存了所有内容。因此,所有更改都被覆盖了。无论如何要撤消我的更改或强制撤回并覆盖我的更改?

请?

git

3
推荐指数
1
解决办法
5754
查看次数

Linux驱动程序和device.h

我有一些直接来自制造商的canbus硬件的Linux驱动程序,但它们已经过时了(至少我的内核),让我自己照顾自己.在跳过一些箍之后,我在编译中遇到了一个错误,但这是一个我似乎无法动摇的错误.

错误是这样的:

./src/esdcan_pci.c:353:9: error: ‘struct device’ has no member named ‘driver_data’
Run Code Online (Sandbox Code Playgroud)

经过大量的互联网调查后,我几乎可以肯定它与我的内核device.h的头文件有关.我已打开标题并查看结构,果然,没有名为driver_data的成员.我不确定的是哪个成员是等价的,或者根本就是一个成员.这是我头文件中结构的版本:

struct device {
    struct device       *parent;

    struct device_private   *p;

    struct kobject kobj;
    const char      *init_name; /* initial name of the device */
    struct device_type  *type;

    struct mutex        mutex;  /* mutex to synchronize calls to
                     * its driver.
                     */

    struct bus_type *bus;       /* type of bus device is on */
    struct device_driver *driver;   /* which driver has allocated this
                       device */
    void        *platform_data; /* Platform specific data, device
                       core …
Run Code Online (Sandbox Code Playgroud)

c drivers linux-kernel

3
推荐指数
1
解决办法
4262
查看次数

使用iconv在C / C ++中将字符串转换为ISO-8859-1

我想将字符串从GBK字符集转换为ISO-8859-1。

我尝试使用iconv库,但iconv()始终返回-1,并errno解码为“无效或不完整的多字节或宽字符”

我该如何实现?

c c++ iso-8859-1 iconv

3
推荐指数
1
解决办法
6087
查看次数

如何在Linux中检索当前的处理器时间?

我在嵌入式设备中使用C语言和Linux作为我的编程平台.

我的问题是,如何正确检索当前处理器时间(勾选).我在time.h中使用clock()函数,似乎我得到了不一致的值.

谢谢.

c linux

2
推荐指数
1
解决办法
460
查看次数

螺旋锁和cli一起使用

我最近从http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.34.1.tar.bz2下载了linux源代码.我在linux-2.6.34.1\Documentation文件夹中的spinlocks.txt文件中遇到了以下段落.

"这确实意味着如果你有一些代码可以做到

cli();
.. critical section ..
sti();
Run Code Online (Sandbox Code Playgroud)

和另一个序列

spin_lock_irqsave(flags);
.. critical section ..
spin_unlock_irqrestore(flags);
Run Code Online (Sandbox Code Playgroud)

然后它们不是互斥的,关键区域可以在两个不同的CPU上同时发生.这本身很好,但关键区域最好对不同的东西至关重要(即它们不能相互踩踏)."

如果某些代码使用cli()/ sti()并且相同代码的其他部分使用spin_lock_irqsave(flags)/ spin_unlock_irqrestore(flags),它们如何影响?

rtos interrupt linux-kernel spinlock

2
推荐指数
1
解决办法
1004
查看次数

2
推荐指数
3
解决办法
2604
查看次数

为现有的全局内存阵列分配更多内存

是否可以将内存添加到全局内存中先前分配的数组?

我需要做的是:

//cudamalloc memory for d_A
int n=0;int N=100;
do
{
 Kernel<<< , >>> (d_A,n++);
 //add N memory to d_A
 while(n!=5)}
Run Code Online (Sandbox Code Playgroud)

做另一个cudamalloc删除以前分配的数组的值?在我的情况下,应该保留以前分配的数组的值...

memory-management cuda

2
推荐指数
1
解决办法
2377
查看次数

使用C99标准会导致GCC编译器错误

我有一个非常简单的打印程序叫做"print.c":

#include <stdio.h>

int main(void){
        printf("Random words");
}
Run Code Online (Sandbox Code Playgroud)

使用该命令进行编译gcc -o print print.c会导致完全干净的编译,并且可执行文件按预期运行.

用命令编译gcc -o -std=c99 print print.c给我:

print: In function `_fini':
(.fini+0x0): multiple definition of `_fini'
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crti.o:(.fini+0x0): first defined here
print: In function `__data_start':
(.data+0x0): multiple definition of `__data_start'
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crt1.o:(.data+0x0): first defined here
print: In function `__data_start':
(.data+0x4): multiple definition of `__dso_handle'
/usr/lib/gcc/i686-linux-gnu/4.6.1/crtbegin.o:(.data+0x0): first defined here
print:(.rodata+0x4): multiple definition of `_IO_stdin_used'
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crt1.o:(.rodata.cst4+0x0): first defined here
print: In function `_start':
(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crt1.o:(.text+0x0): first …
Run Code Online (Sandbox Code Playgroud)

c gcc c99

2
推荐指数
1
解决办法
2707
查看次数

ssh 连接关闭时 SIGHUP 的原始发送者是谁?

我们知道,当 ssh 连接断开时,bash 将收到 SIGHUP 信号,并将此信号转发给其所有子节点。

我想知道这个SIGHUP的原始发送者是谁,是ssh客户端、ssh服务器、操作系统还是其他?

我阅读了openssh-portabal的代码,发现只有这里使用了SIGHUP: https: //github.com/openssh/openssh-portable/blob/master/sshconnect.c#L285

调用者似乎是客户端: https://github.com/openssh/openssh-portable/blob/master/ssh.c#L1533

我在服务器端 sshd.c 中没有找到任何发送者代码

这是否意味着发件人是客户端?在这种情况下,如果连接中断,服务器将不会收到 SIGHUP。我对此不太确定,但根据我的经验,这似乎不是真的。

所以我很好奇谁应该是原始发件人。这有标准吗?

linux ssh tty linux-kernel pty

2
推荐指数
1
解决办法
324
查看次数

标签 统计

c ×5

linux ×3

linux-kernel ×3

c++ ×2

c99 ×1

cuda ×1

drivers ×1

gcc ×1

git ×1

iconv ×1

interrupt ×1

iso-8859-1 ×1

memory-management ×1

pty ×1

rtos ×1

spinlock ×1

ssh ×1

system-calls ×1

tty ×1

variables ×1

x86 ×1