小编Myk*_*sov的帖子

如何在Linux内核中使用生物请求读取扇区

如何创建自己的生物请求以从磁盘驱动器读取扇区?

我正在尝试以下但它冻结了系统.

static void read_bio()
{
    struct bio *b;
    struct page *p;

    b = bio_alloc(GFP_KERNEL, 1);
    if (!b) {
        printk(KERN_INFO "bio allocation failed\n");
    }
    bio_init(b);

    b->bi_sector = 10000;
    b->bi_bdev = bd;    /* "/dev/sda1" */
    b->bi_end_io = bio_end_clone;

    p = alloc_page(GFP_KERNEL);
    if (!p) {
        printk(KERN_INFO "page allocation failed\n");
    }
    bio_add_page(b, p, PAGE_SIZE, 0);
    b->bi_private = p;

    bio_get(b);
    submit_bio(READ, b);
    printk(KERN_DEBUG "submit read request\n");
}
Run Code Online (Sandbox Code Playgroud)

linux kernel driver

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

从内核模块发送带有套接字的数据包

我正在编写一个内核模块,它应该从用户空间接收消息并通过套接字发回响应.

当程序和模块在同一台机器上并使用IP时127.0.0.1,一切正常.但是,当我在不同的机器上尝试并使用真实的网络IP时,类似的东西192.168.3.146只能以一种方式工作.

我从用户空间收到消息,但我无法从内核收到消息.我使用sock_sendmsg函数从内核发送消息,它不会返回任何错误.此外,我没有从防火墙收到任何来自内核模块的来自另一台机器的消息.

这里有类似的问题和例子,但它们对我来说不够用,或者使用了太旧的内核版本的示例.对于骨架我使用了这个,来自UDP套接字:http://people.ee.ethz.ch/~arkeller/ linux/multi/kernel_user_space_howto-3.html.有帮助吗?

用于发送的内核模块代码:

void send_data(unsigned char *data)
{
    if(!IS_ERR_OR_NULL(data))
    {
        int ret;
        mm_segment_t oldfs;
        struct msghdr message;
        struct iovec ioVector;
        struct sockaddr_in sendAddr;

        sendAddr.sin_family = AF_INET;
        sendAddr.sin_addr.s_addr = INADDR_ANY;
        //sendAddr.sin_addr.s_addr = in_aton("192.168.1.75");
        //here I get port from sk_buff structure that I received.
        sendAddr.sin_port = *((unsigned short*)skBuffer->data);

        memset(&message, 0, sizeof(message));
        message.msg_name = &sendAddr;
        message.msg_namelen = sizeof(sendAddr);

        /* send the message back */
        ioVector.iov_base = data;
        ioVector.iov_len  = strlen(data); …
Run Code Online (Sandbox Code Playgroud)

sockets kernel udp kernel-module linux-kernel

6
推荐指数
1
解决办法
8260
查看次数

标签 统计

kernel ×2

driver ×1

kernel-module ×1

linux ×1

linux-kernel ×1

sockets ×1

udp ×1