수동으로 로드하고 상호 작용할 수 있는 사용자 정의 커널 모듈(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.
그러나 사용자에게 더 편리하게 만들고 싶다면 두 가지 접근 방식을 취할 수 있습니다.
드라이버 코드를 수정하여 장치 노드를 생성할 수 있습니다. 필드가 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); }
이는 정적 메이저/마이너를 선택한 경우에만 작동하므로 아마도 최선의 방법은 아닐 것입니다. 그러나 모든 문서에서는 이러한 "정적 장치 노드"를 매우 자주 언급하므로 정적 장치 노드를 만들 여지가 아직 남아 있을 수 있습니다.
장치에 udev 규칙을 제공할 수 있습니다.Daniel Drake가 훌륭한 튜토리얼을 작성했습니다.
udev(7)
공식 문서보다 더 많은 정보를 얻을 수 있습니다 .
답변2
먼저 시작 시(보통 자동 감지 후) 로드할 모듈을 찾기 위해 robsio
또는 distro 에 넣을 수 있습니다 . 귀하의 시스템에 /etc/modules
있을 수 있습니다 ./etc/modules.d/_____
그 후 프로세스 항목을 요청하는 것은 아마도 모듈 코드에서 수행하는 작업일 것입니다. 그러나 이는 내 전문 분야를 벗어나므로 전문가에게 맡기겠습니다.