mknod vĩnh viễn trong archlinux


7

Tôi có một mô-đun hạt nhân tùy chỉnh (trên ArchLinux) mà tôi có thể tải thủ công và tương tác. Những gì tôi muốn làm là tải nó vào lúc khởi động. Cho đến nay tôi đã quản lý để thiết bị xuất hiện /proc/deviceskhi khởi động.

Làm thế nào để tạo một nút ra khỏi nó khi khởi động là điều đang ám ảnh tôi. Đã xem udevhầu hết các ví dụ sử dụng ổ USB làm hướng dẫn không phải là trường hợp của tôi. Thiết bị thực tế là một thẻ IO tùy chỉnh. Nó là một thiết bị nhân vật.

Dưới đây là tập lệnh để tải thiết bị từ trình bao (hoạt động):

#!/bin/sh
sudo insmod ./robsio.ko
DEV=`cat /proc/devices | grep robsio | awk '{print $1}'`
sudo mknod /dev/proc/robsio c $DEV 0

Điều gì ngăn bạn chỉ sử dụng mã hoạt động trong shell khi khởi động, bằng cách đặt nó vào (ví dụ) /etc/rc.local?
gentledevil

udev sẽ tự động tạo nút dev cho bạn khi mô-đun được tải.
psusi

@zanko cảm ơn bạn điều này thực sự làm việc. Mặc dù nó dường như không phải là giải pháp tốt nhất nhưng nó sẽ giải quyết vấn đề của tôi trong thời gian tạm thời cho đến khi tôi có được kiến ​​thức tốt hơn về cách thức hoạt động của 'udev'. @psusi 'udev' không tự động làm điều đó là lý do tại sao tôi đăng câu hỏi, có lẽ tôi nên nói điều này trong câu hỏi ban đầu của mình
Rob Sloot

Câu trả lời:


4

Bất kỳ nút thiết bị nào bạn tạo /lib/udev/devicessẽ được sao chép vào /dev/lúc khởi động hệ thống:

DESCRIPTION
   udevd listens to kernel uevents. For every event, udevd
   executes matching instructions specified in udev rules. See
   udev(7).

   On startup the content of the directory /lib/udev/devices is
   copied to /dev. If kernel modules specify static device
   nodes, these nodes are created even wihtout a corresponding
   kernel device, to allow on-demand loading of kernel modules.
   Matching permissions specified in udev rules are applied to
   these static device nodes.

Nhưng nếu bạn muốn làm cho một cái gì đó thuận tiện hơn cho người dùng của mình, có hai cách bạn có thể thực hiện:

  1. Bạn có thể sửa đổi mã trình điều khiển để tạo nút thiết bị: drivers/base/core.c::device_add(struct device *dev)cho phép bạn tạo các nút thiết bị nếu struct device devttrường của bạn khác không:

        if (MAJOR(dev->devt)) {
            error = device_create_file(dev, &devt_attr);
            if (error)
                goto ueventattrError;
    
            error = device_create_sys_dev_entry(dev);
            if (error)
                goto devtattrError;
    
            devtmpfs_create_node(dev);
        }
    

    Bởi vì điều này sẽ chỉ hoạt động nếu bạn chọn một chính / phụ tĩnh, nó có thể không phải là cách tốt nhất về phía trước, nhưng tất cả các tài liệu đều đề cập đến các "nút thiết bị tĩnh" này khá thường xuyên, vì vậy có lẽ vẫn còn một khoảng trống để tạo các nút thiết bị tĩnh .

  2. Bạn có thể cung cấp các quy tắc udev cho các thiết bị của bạn; Daniel Drake đã viết một hướng dẫn tốt đẹp mà bạn có thể tìm thấy nhiều ánh sáng hơn udev(7)tài liệu chính thức.


1

Bạn có thể bắt đầu bằng cách đưa robsiovào /etc/moduleshoặc bất cứ nơi nào bản phân phối của bạn tìm kiếm các mô-đun để tải thời gian khởi động (thường là sau khi nó tự động phát hiện). Nó có thể là /etc/modules.d/_____trên hệ thống của bạn.

Sau đó, yêu cầu một mục nhập Proc có thể là điều bạn làm trong mã mô-đun, nhưng đó là ngoài lĩnh vực chuyên môn của tôi nên tôi sẽ để nó cho các bậc thầy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.