小编dem*_*guy的帖子

kbuild如何实际工作?

当我正在开发一个Linux驱动程序时,我已经阅读了有关如何通过本文档编写linux kbuild makefile的内容

我知道kbuild系统使用makefile变量,例如obj-y obj-m来确定要构建的内容以及如何构建.

但我感到困惑的是kbuild系统在哪里真正执行构建过程.总之,如果我有obj-m = a.o,那么kbuild系统在哪里解析obj-m并执行gcc a.c

c linux makefile linux-kernel kbuild

17
推荐指数
1
解决办法
7736
查看次数

为什么我们需要在poll中调用poll_wait?

在LDD3中,我看到了这样的代码

static unsigned int scull_p_poll(struct file *filp, poll_table *wait)
{
    struct scull_pipe *dev = filp->private_data;
    unsigned int mask = 0;

    /*
     * The buffer is circular; it is considered full
     * if "wp" is right behind "rp" and empty if the
     * two are equal.
     */
    down(&dev->sem);
    poll_wait(filp, &dev->inq,  wait);
    poll_wait(filp, &dev->outq, wait);
    if (dev->rp != dev->wp)
        mask |= POLLIN | POLLRDNORM;    /* readable */
    if (spacefree(dev))
        mask |= POLLOUT | POLLWRNORM;   /* writable */
    up(&dev->sem);
    return mask;
}
Run Code Online (Sandbox Code Playgroud)

但它说poll_wait不会等待并立即返回.那为什么我们需要打电话呢?为什么我们不能只返回面具?

linux epoll system-calls linux-device-driver linux-kernel

10
推荐指数
1
解决办法
9665
查看次数

mod_wsgi如何实际工作?

即使在阅读本文档之后,我真的对mod_wsgi中的多个线程感到困惑

主要问题是,mod_wsgi如何调用我的python脚本?

为了使我的问题清楚,我将在下面的问题中总结

假设我的服务器配置如下:

WSGIDaemonProcess XXX.com processes=12 threads=20 display-name=%{GROUP}

WSGIProcessGroup XXX.com

WSGIScriptAlias /sign /XXX/Http/upload.wsgi
Run Code Online (Sandbox Code Playgroud)

我正在使用 prefork MPM

/XXX/Http/upload.wsgi看起来像这样

class app(object):

def __init__(self):
    pass

def __call__(self, environ, start_response):
    temp_unsign = tempfile.mkdtemp()
    temp_signed = tempfile.mkdtemp()

    try:
        response_headers = [('Content-type', 'text/plain;charset=UTF-8'),('Content-Length', str(len('123')))]
        status = '200 OK'
        start_response(status, response_headers)

        return ['123']
    finally:
        shutil.rmtree(temp_unsign)
        shutil.rmtree(temp_signed)
Run Code Online (Sandbox Code Playgroud)

application = app()

他的问题是:

  1. 如果同时有来自不同IP的5个请求,那么会有多少个app实例?一个例子?或者每个请求一个实例
  2. 如果来自同一IP和同一台计算机的5个请求同时怎么办?
  3. 所有5 __call__种方法都在5个不同的线程中运行吗?

我问这个是因为No such directory执行时我总是遇到错误shutil.rmtree.

当然,我无法理解mod_wsgi如何在多线程中实际工作

python multithreading mod-wsgi wsgi

8
推荐指数
0
解决办法
637
查看次数

如果私钥在HSM中,如何生成证书?

我经常openssl用来生成RSA密钥和证书.但现在我遇到了一个问题.openssl x509 -req需要私钥作为输入.但现在我们正在使用HSM来保护私钥,而我永远无法触及私钥.这样我如何生成x509证书?

openssl hsm x509certificate

8
推荐指数
2
解决办法
9877
查看次数

为什么arm-linux-gcc在进入IRQ模式时只保留r0-r4

我正在使用基于ARM cortex-A8的S5PV210

当我声明这样的中断例程时:

void isr_routine(void)  __attribute__ ((interrupt ("IRQ")));
Run Code Online (Sandbox Code Playgroud)

并像这样编译

arm-linux-gcc -c -march=armv7-a -fpie -fno-builtin $< -o $@
Run Code Online (Sandbox Code Playgroud)

我知道gcc会通过推送一些寄存器为我切换上下文.在我知道这一点之前,我手动完成了.所以我很好奇gcc是如何做到的.拆解后,我找到了如下代码

PUSH     {r0-r4,r11,r12,lr}
Run Code Online (Sandbox Code Playgroud)

这与我关于如何切换上下文的概念背道而驰.在Arm cortex-A8官方文档中,明确表示r0-r12由用户模式和IRQ模式共享.但是用户模式中的lr独立于IRQ模式.所以,我曾经像这样切换上下文

PUSH     {r0-r12}
Run Code Online (Sandbox Code Playgroud)

可以吗?为什么gcc推送lr注册,为什么gcc不推r5-r10 rigsters?

c assembly gcc arm cortex-a8

5
推荐指数
1
解决办法
407
查看次数

如何同时导入同一Python模块的两个版本?

假设我有两个版本的python软件包,称“ lib”。一个在文件夹中~/version1/lib,另一个在文件夹中~/version2/lib。我正在尝试通过执行以下操作在一个会话中加载两个软件包:

sys.path.insert(0, '~/version1')
import lib as a

sys.path.insert(0, '~/version2')
import lib as b
Run Code Online (Sandbox Code Playgroud)

但是由于缓存的原因,b它与相同,因此不起作用a

反正有做吗?也许使用挂钩sys.meta_path?我没有弄清楚。

还是有删除进口模块缓存的方法?

python python-module python-import

5
推荐指数
2
解决办法
1914
查看次数

Jstack挂起并且无法捕获堆栈信息

我的java程序挂在那里,我无法调试它。这是我尝试过的

  1. jstack $pid,挂起并且从不响应
  2. jstack -F $pid 与/proc/sys/kernel/yama/ptrace_scope == 0. 得到下面的错误
Error: -F option used
Cannot connect to core dump or remote debug server. Use jhsdb jstack instead
Run Code Online (Sandbox Code Playgroud)
  1. 然后我尝试了jhsdb jstack --pid $pid。仍然永远挂着,我得到了
Attaching to process ID 123212, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 11+28
Deadlock Detection:
Run Code Online (Sandbox Code Playgroud)

我按后CTRL+C。我有:

Attaching to process ID 123212, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 11+28
Deadlock Detection:

java.lang.RuntimeException: VM.initialize() was not …
Run Code Online (Sandbox Code Playgroud)

java freeze jstack

5
推荐指数
0
解决办法
528
查看次数

如何将pem公钥转换为openssl RSA*结构

假设我必须像这样公开pem键

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7vbqajDw4o6gJy8UtmIbkcpnk
O3Kwc4qsEnSZp/TR+fQi62F79RHWmwKOtFmwteURgLbj7D/WGuNLGOfa/2vse3G2
eHnHl5CB8ruRX9fBl/KgwCVr2JaEuUm66bBQeP5XeBotdR4cvX38uPYivCDdPjJ1
QWPdspTBKcxeFbccDwIDAQAB
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)

我想使用openssl

int RSA_public_decrypt(int flen, const unsigned char *from, unsigned char *to,RSA *rsa, int padding).我怎样才能将pem键翻译成RSA *rsa结构?

仅供参考:我不能使用BIO,因为我只想将openssl移植到没有UNIX文件系统的引导加载程序中.我能做的唯一方法是将公钥转换为C数组.

c encryption openssl cryptography rsa

4
推荐指数
1
解决办法
7768
查看次数

找不到Linux shell脚本,但确实存在

我在Openwrt上创建了一个shell脚本"/ etc/aaa",其中包含以下代码:#!/ bin/sh echo"Hello World!"

我还使用此命令来确保适当的权限:

chmod 777 /etc/aaa
Run Code Online (Sandbox Code Playgroud)

在执行以下任何2个命令时

sh /etc/aaa
Run Code Online (Sandbox Code Playgroud)

要么

ash /etc/aaa
Run Code Online (Sandbox Code Playgroud)

它运作良好并打印"Hello World".当我尝试使用此命令执行它时会发生此问题:

/etc/aaa
Run Code Online (Sandbox Code Playgroud)

我收到此错误的地方:

-ash: /etc/aaa: not found
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么会这样吗?我在这里错过了什么?

linux shell openwrt

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