Archlinux의 mknod 영구 명령

Archlinux의 mknod 영구 명령

수동으로 로드하고 상호 작용할 수 있는 사용자 정의 커널 모듈(ArchLinux)이 있습니다. 내가 하고 싶은 것은 시작할 때 로드하는 것입니다. 지금까지 부팅 시 장치가 표시되도록 했습니다 /proc/devices.

시작할 때 노드를 만드는 방법이 나를 귀찮게 합니다. USB 드라이브를 가이드로 사용하는 대부분의 예를 보았지만 udev이것은 나에게 해당되지 않습니다. 실제 장치는 맞춤형 IO 카드입니다. 캐릭터 디바이스입니다.

다음은 셸에서 장치를 로드하는 스크립트입니다(작동).

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

답변1

생성한 모든 장치 노드는 /lib/udev/devices시스템 시작 시 여기에 복사됩니다./dev/

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.

그러나 사용자에게 더 편리하게 만들고 싶다면 두 가지 접근 방식을 취할 수 있습니다.

  1. 드라이버 코드를 수정하여 장치 노드를 생성할 수 있습니다. 필드가 0이 아닌 경우 drivers/base/core.c::device_add(struct device *dev)장치 노드를 생성할 수 있습니다.struct device devt

        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);
        }
    

    이는 정적 메이저/마이너를 선택한 경우에만 작동하므로 아마도 최선의 방법은 아닐 것입니다. 그러나 모든 문서에서는 이러한 "정적 장치 노드"를 매우 자주 언급하므로 정적 장치 노드를 만들 여지가 아직 남아 있을 수 있습니다.

  2. 장치에 udev 규칙을 제공할 수 있습니다.Daniel Drake가 훌륭한 튜토리얼을 작성했습니다.udev(7)공식 문서보다 더 많은 정보를 얻을 수 있습니다 .

답변2

먼저 시작 시(보통 자동 감지 후) 로드할 모듈을 찾기 위해 robsio또는 distro 에 넣을 수 있습니다 . 귀하의 시스템에 /etc/modules있을 수 있습니다 ./etc/modules.d/_____

그 후 프로세스 항목을 요청하는 것은 아마도 모듈 코드에서 수행하는 작업일 것입니다. 그러나 이는 내 전문 분야를 벗어나므로 전문가에게 맡기겠습니다.

관련 정보