PC의 프린터 출력 포트에서 PPS를 생성하기 위해 pps_gen_parport 커널 모듈을 성공적으로 사용한 사람이 있습니까?
이 모듈은 잠재적인 잠금 문제로 인해 버전 2.6.38의 커널에 나타난 이후 거의 손상된 것으로 표시되었습니다. 그러나 (a) 신호의 극성을 지정하고 (b) 원칙적으로 잠금 문제를 해결하는 일부 적용되지 않은 패치가 있습니다.
https://lore.kernel.org/patchwork/patch/760701/
https://lkml.org/lkml/2011/2/18/310
https://lore.kernel.org/patchwork/patch/760699/
패치를 적용한 후 DKMS를 사용하여 x86_64 4.19.0(Debian)에서 모듈을 빌드할 수 있었고 적어도 단기적으로는 잠김 없이 실행할 수 있었습니다.
디버그 메시지를 통해 코드가 병렬 포트(특히 펄스 스트로브 신호)에 기록해야 하는 시스템 호출을 통해 실행되고 있음을 알 수 있지만 연결된 로직 분석기는 아무 일도 일어나지 않음을 보여줍니다. 나는 오래된 노트북에서 약간 오래된 버전의 코드를 실행해 보았지만 제한적인 성공을 거두었습니다.
이것은에서 비롯됩니다https://github.com/torvalds/linux/blob/master/drivers/pps/generators/pps_gen_parport.c
/* busy loop until the time is right for an assert edge */
do {
ktime_get_real_ts64(&ts2);
} while (expire_time.tv_sec == ts2.tv_sec && ts2.tv_nsec < lim);
// Debugging output here is successful
/* set the signal */
port = dev->pardev->port;
port->ops->write_control(port, SIGNAL); // Appears to have no effect
// Debugging output here is successful
/* busy loop until the time is right for a clear edge */
lim = NSEC_PER_SEC - dev->port_write_time;
do {
ktime_get_real_ts64(&ts2);
} while (expire_time.tv_sec == ts2.tv_sec && ts2.tv_nsec < lim);
pps_gen_parport가 장치에 독점적으로 액세스할 수 있도록 lp 모듈을 블랙리스트에 추가했습니다.
# modprobe pps_gen_parport
# lsmod | grep par
pps_gen_parport 16384 0
parport_pc 32768 1
parport 57344 3 parport_pc,ppdev,pps_gen_parport
# dmesg -e
[ +11.585790] pps_gen_parport: parallel port PPS signal generator
[ +0.000133] pps_gen_parport: attached to parport0
[ +0.000049] pps_gen_parport: port write takes 1429ns
[Apr28 17:58] pps_gen_parport: we are late this time 1619629128.999968656
[Apr28 17:59] pps_gen_parport: we are late this time 1619629141.999983670
연습의 목적은 컴퓨터의 PPS 출력을 다른 장치의 PPS 신호와 비교하여 컴퓨터가 시간 제한 입력 이벤트를 보고할 때 가정해야 하는 대기 시간을 이해할 수 있도록 하는 것입니다.
메모리에 어떤 모듈이 있어야 하는지에 대해 제가 어리석은 실수를 저지르고 있을 수도 있습니다.
코드를 다음에 업로드했습니다.https://github.com/MarkMLl/pps_gen_parport토론 목적으로.
이 분야에 대해 잘 알고 제안할 만한 사람이 있나요?