Code Monkey home page Code Monkey logo

px4_drv's People

Contributors

nns779 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

px4_drv's Issues

T側での録画ができない

dvr1@DVR1:~/px4_drv/driver$ recpt1 --device /dev/px4video2 13 10 test.ts
using device: /dev/px4video2
Cannot open tuner device: /dev/px4video2

CPUはAMD A10-9700E
OSは Ubuntu 17.10.1で、カーネルのバージョンは以下のとおりです
dvr1@DVR1:~/px4_drv/driver$ uname -a
Linux DVR1 4.15.5-041505-generic #201802221031 SMP Thu Feb 22 15:32:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

lsしてもやはりデバイスファイルは作成されていることが確認できるのですが、いざ録画しようと思うと、デバイスが開けません。

[PX4-W3PE4] PTX_GET_CNRからCN比を取得しようとするとENOSYSが返却される

特殊設定になりますが、原因の切り分け方法が分からないため、ご質問させてください。

環境

  • Ubuntu Server 22.04
  • developブランチの最新のドライバ(7fa9f05)
  • PX4-W3PE4
  • エリアは東京都で、視聴自体は正しく行うことができる

できていること

checksignal 18 を実行した結果

device = /dev/px4video2
C/N = 30.716024dB^C

つまり、https://github.com/stz2012/recpt1 のchecksignal を使うと、
ioctl(fd, GET_SIGNAL_STRENGTH, &rc) の結果として
rcに正しいC/N比が格納されていることがわかる。

できないこと

use std::os::unix::io::AsRawFd;
nix::ioctl_write_ptr!(set_ch, 0x8d, 0x01, Freq);
nix::ioctl_none!(start_rec, 0x8d, 0x02);
nix::ioctl_none!(stop_rec, 0x8d, 0x03);
nix::ioctl_read!(ptx_get_cnr, 0x8d, 0x04, i32);
nix::ioctl_write_int!(ptx_enable_lnb, 0x8d, 0x05);
nix::ioctl_none!(ptx_disable_lnb, 0x8d, 0x06);
nix::ioctl_write_int!(ptx_set_sys_mode, 0x8d, 0x0b);

#[repr(C)]
pub struct Freq {
    pub ch: i32,
    pub slot: i32,
}

fn main() {
    let path = std::path::Path::new("/dev/px4video2");

    let freq = Freq {
        ch: 68,
        slot: 0,
    };

    let mut output = 0i32;
    let f = std::fs::OpenOptions::new().read(true).open(path).unwrap();
    let _errno = unsafe { set_ch(f.as_raw_fd(), &freq) }.unwrap();
    let _errno = unsafe { ptx_get_cnr(f.as_raw_fd(), &mut output) }.unwrap();
}

以上のプログラムをRust 1.60でコンパイルし実行すると、

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: ENOSYS', src/main.rs:27:69
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

SET_CHANNELは成功するのに、
なぜかPTX_GET_CNRはENOSYSが返却されてしまう。

疑問点

  • なぜCで書かれたioctlは機能するのに、Rustからioctlを叩いたときに限ってENOSYSが返るのか
  • (Rustで書いたせいで互換性が失われた可能性はかなり低いと考えています。実際SET_CHANNELは成功していますし、START_STREAMINGとSTOP_STREAMINGも同じ方法で呼び出して正しく機能する(録画できる)ことを確認しています)
  • PTX_GET_CNRがENOSYSを返すコードパスは

    px4_drv/driver/ptx_chrdev.c

    Lines 418 to 421 in d528b9b

    if (chrdev->ops && chrdev->ops->read_cnr_raw)
    ret = chrdev->ops->read_cnr_raw(chrdev, &cn);
    else
    ret = -ENOSYS;
    しかないが、ここを通るようなことはどんな場合にあり得るのか

ハードウエアを安全に取り外してメディアを取り出す

Windows11にアップデートしてから気づいたんだけど
”ハードウエアの安全な取り外し”のアイコンが出てしまう
Windows10の頃には出ていなかったような気がします
USBメモリーやHDDを外そうとして、間違ってクリックしそうなので
出ないようにしてほしい

px4_drv for WinUSB で、空きチューナー不足などでエラーが発生した際にメッセージボックスを表示するのを止められるようにしてほしい

いつも px4_drv を使わせて頂いています。このような大変素晴らしいドライバを開発してくださった事に頭が下がります。

さて、表題の通りですが、WinUSB 版の px4_drv で、空きチューナー不足などでエラーが発生した際、メッセージボックスを表示してエラー内容が確認できるようになっているかと思いますが、これを ini ファイルの設定で止められるようにしていただけないでしょうか?

メッセージボックスの表示自体は、何らかの問題があってチューナーが使用できなくなっているときには「BonDriver の初期化ができません」以外の詳細な情報が手に入るため有効かと思います。ただ、私のように Windows 機を録画サーバーにしている場合、様々な問題が生じます。

録画サーバー用途

まず、メッセージボックスを表示すると、ユーザーの手動動作で「OK」を押して閉じられるまで、それ以降の処理が進まずブロックされます(そういう認識でいます)。
録画サーバーの場合、当然ながらメッセージボックスが表示されている事に気づくことができません。仮に気づけたところで、リモートデスクトップしない限りメッセージボックスを閉じれないでしょう。

Mirakurun (BonRecTest) や BonDriverProxyEx などチューナー共有ソフトでのチューナーオープン時、他のソフトがチューナーを使っているなどの理由でチューナーオープンに失敗し、メッセージボックスが表示されてしまったとします。
メッセージボックスは閉じられず後続の処理も行われないため、OpenTuner() のタイムアウト時間になるまで、ソフト側はチューナーをオープンできなかった事をクライアント側に伝えられません。
他の PC で TVTest を (BonDriver_Proxy を使い) 起動したとき、散々待たされた上で「BonDriver の初期化に失敗しました」になってしまうのは利便性が悪すぎます。

常に PC の前に人がいて画面を見ている状況ならそこまで問題はないでしょうけど、録画サーバーという用途の場合、この仕様は厳しいものがあります。

仕様としてメッセージボックスが表示されるべきか

そもそも、本来裏方に徹するはずの BonDriver が、メッセージボックスの UI としてデスクトップに表示され、さらに後続の処理が全て break されてしまうというのは、仕様としてあまり良くないように思います。

前述したように、PC の前に人がいない際には、メッセージボックスが出た事に気づかず閉じられないまま放置される事で、様々な問題が起こりえます。
もし PC の前に人がいたとしても、ゲームなり他の作業に集中していて、バックグラウンドで EDCB が EPG 取得をしていたりするときに突然ポップアップが出てきたとしたら、大半の人はうざったく感じるでしょう。
チューナーが開けない状況があり得る事を理解した上で、開けなかったら適当に無視したり別のチューナーにフォールバックしてほしいというケースも考えられます。EDCB と Mirakurun を同時に動かしている私の録画サーバーもその一つです。

せめてメッセージボックスの表示時に後続の処理が break されなければ…というのはありますが、そうするよりも、エラー発生時にメッセージボックスを表示するのではなく、その内容をイベントログかテキストファイルに書き込み、必要に応じて確認できる状態が最良なように思います。全てにおいてチューナーのエラーを必ず確認したいとは限りませんし。

詳細な仕様はおまかせしますが、オプションでも構わないので、エラー発生時にメッセージボックスを表示しない選択ができるようにしていただけないでしょうか?
ご検討頂ければ幸いです。

ドライバロード時にメモリアロケーションが失敗する

メモリが数百MB空いているときでもドライバロード時にメモリアロケーションが失敗するケースがあります。

発生した際の free -h の出力と dmesg

# free -h
total        used        free      shared  buff/cache   available
Mem:           3.8G        418M        824M         12M        2.6G        3.2G
Swap:           11G        103M         11G
[2753909.691583] px4_drv: px4_drv version 0.2.0, rev: 134, commit: 59d380ddb7503a9c01eeda165e2f921a1ed29f12 @ develop
[2753909.691621] modprobe: page allocation failure: order:7, mode:0x2080020(GFP_ATOMIC)
[2753909.691628] CPU: 2 PID: 15211 Comm: modprobe Tainted: G           O    4.9.0-8-amd64 #1 Debian 4.9.110-3+deb9u6
[2753909.691629] Hardware name: HP ProLiant ML110 G7, BIOS J01 07/01/2013
[2753909.691631]  0000000000000000 ffffffff9e531e54 ffffffff9ec016e8 ffffa98ec08b78d8
[2753909.691634]  ffffffff9e38a84a 0208002000000001 ffffffff9ec016e8 ffffa98ec08b7878
[2753909.691637]  ffff971200000010 ffffa98ec08b78e8 ffffa98ec08b7898 ee601e5120ae90be
[2753909.691639] Call Trace:
[2753909.691646]  [<ffffffff9e531e54>] ? dump_stack+0x5c/0x78
[2753909.691650]  [<ffffffff9e38a84a>] ? warn_alloc+0x13a/0x160
[2753909.691653]  [<ffffffff9e38ab74>] ? __alloc_pages_slowpath+0x294/0xbf0
[2753909.691656]  [<ffffffff9e24810e>] ? native_send_call_func_ipi+0xee/0x100
[2753909.691658]  [<ffffffff9e38b6d1>] ? __alloc_pages_nodemask+0x201/0x260
[2753909.691661]  [<ffffffff9e3dc991>] ? alloc_pages_current+0x91/0x140
[2753909.691663]  [<ffffffff9e386fea>] ? __get_free_pages+0xa/0x30
[2753909.691669]  [<ffffffffc0c3823c>] ? ringbuffer_alloc+0x9c/0x150 [px4_drv]
[2753909.691674]  [<ffffffffc0c30829>] ? px4_probe+0x1f9/0x9b0 [px4_drv]
[2753909.691679]  [<ffffffff9e68c6bd>] ? __pm_runtime_set_status+0x1bd/0x270
[2753909.691691]  [<ffffffffc03e9282>] ? usb_probe_interface+0x162/0x2c0 [usbcore]
[2753909.691694]  [<ffffffff9e681403>] ? driver_probe_device+0x223/0x430
[2753909.691696]  [<ffffffff9e6816ed>] ? __driver_attach+0xdd/0xe0
[2753909.691698]  [<ffffffff9e681610>] ? driver_probe_device+0x430/0x430
[2753909.691699]  [<ffffffff9e67ef39>] ? bus_for_each_dev+0x69/0xb0
[2753909.691701]  [<ffffffff9e68063a>] ? bus_add_driver+0x16a/0x260
[2753909.691703]  [<ffffffff9e681f97>] ? driver_register+0x57/0xc0
[2753909.691711]  [<ffffffffc03e7bab>] ? usb_register_driver+0x7b/0x130 [usbcore]
[2753909.691716]  [<ffffffffc0c30fe0>] ? px4_probe+0x9b0/0x9b0 [px4_drv]
[2753909.691719]  [<ffffffffc0c31077>] ? px4_module_init+0x97/0x100 [px4_drv]
[2753909.691722]  [<ffffffff9e20218e>] ? do_one_initcall+0x4e/0x180
[2753909.691724]  [<ffffffff9e3ca24d>] ? __vunmap+0x6d/0xc0
[2753909.691728]  [<ffffffff9e37fdd1>] ? do_init_module+0x5b/0x1f6
[2753909.691730]  [<ffffffff9e30372a>] ? load_module+0x25ba/0x2ac0
[2753909.691732]  [<ffffffff9e2ffe50>] ? __symbol_put+0x60/0x60
[2753909.691735]  [<ffffffff9e303e76>] ? SYSC_finit_module+0xc6/0xf0
[2753909.691737]  [<ffffffff9e203b7d>] ? do_syscall_64+0x8d/0xf0
[2753909.691740]  [<ffffffff9e815c4e>] ? entry_SYSCALL_64_after_swapgs+0x58/0xc6
[2753909.691741] Mem-Info:
[2753909.691746] active_anon:6612 inactive_anon:13420 isolated_anon:0
                  active_file:249673 inactive_file:424723 isolated_file:0
                  unevictable:0 dirty:131 writeback:0 unstable:0
                  slab_reclaimable:22912 slab_unreclaimable:18795
                  mapped:7457 shmem:3266 pagetables:1647 bounce:0
                  free:193572 free_pcp:678 free_cma:0
[2753909.691750] Node 0 active_anon:26448kB inactive_anon:53680kB active_file:998692kB inactive_file:1698892kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:29828kB dirty:524kB writeback:0kB shmem:13064kB shmem_thp: 0kB shmem_pmdmapped: 0kB anon_thp: 0kB writeback_tmp:0kB unstable:0kB pages_scanned:0 all_unreclaimable? no
[2753909.691751] Node 0 DMA free:15828kB min:268kB low:332kB high:396kB active_anon:0kB inactive_anon:0kB active_file:12kB inactive_file:32kB unevictable:0kB writepending:0kB present:15956kB managed:15872kB mlocked:0kB slab_reclaimable:0kB slab_unreclaimable:0kB kernel_stack:0kB pagetables:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
[2753909.691756] lowmem_reserve[]: 0 3752 3868 3868 3868
[2753909.691759] Node 0 DMA32 free:755936kB min:65288kB low:81608kB high:97928kB active_anon:25416kB inactive_anon:52344kB active_file:985068kB inactive_file:1666500kB unevictable:0kB writepending:524kB present:3946704kB managed:3870084kB mlocked:0kB slab_reclaimable:82008kB slab_unreclaimable:60160kB kernel_stack:2944kB pagetables:6120kB bounce:0kB free_pcp:2296kB local_pcp:660kB free_cma:0kB
[2753909.691764] lowmem_reserve[]: 0 0 116 116 116
[2753909.691767] Node 0 Normal free:2524kB min:2020kB low:2524kB high:3028kB active_anon:1032kB inactive_anon:1336kB active_file:13612kB inactive_file:32360kB unevictable:0kB writepending:0kB present:196604kB managed:119080kB mlocked:0kB slab_reclaimable:9640kB slab_unreclaimable:15020kB kernel_stack:1952kB pagetables:468kB bounce:0kB free_pcp:416kB local_pcp:80kB free_cma:0kB
[2753909.691772] lowmem_reserve[]: 0 0 0 0 0
[2753909.691775] Node 0 DMA: 3*4kB (M) 3*8kB (M) 1*16kB (M) 3*32kB (UM) 3*64kB (UH) 3*128kB (UMH) 3*256kB (UMH) 2*512kB (UM) 3*1024kB (UMH) 1*2048kB (U) 2*4096kB (ME) = 15828kB
[2753909.691788] Node 0 DMA32: 79060*4kB (UMEH) 45411*8kB (UMEH) 4746*16kB (UMEH) 2*32kB (MH) 1*64kB (H) 1*128kB (H) 1*256kB (H) 0*512kB 0*1024kB 0*2048kB 0*4096kB = 755976kB
[2753909.691800] Node 0 Normal: 211*4kB (UE) 176*8kB (UME) 17*16kB (UME) 0*32kB 0*64kB 0*128kB 0*256kB 0*512kB 0*1024kB 0*2048kB 0*4096kB = 2524kB
[2753909.691810] Node 0 hugepages_total=0 hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB
[2753909.691811] 684345 total pagecache pages
[2753909.691812] 6675 pages in swap cache
[2753909.691813] Swap cache stats: add 1838298, delete 1831623, find 88424673/89011482
[2753909.691814] Free swap  = 12103456kB
[2753909.691815] Total swap = 12209148kB
[2753909.691815] 1039816 pages RAM
[2753909.691816] 0 pages HighMem/MovableOnly
[2753909.691817] 38557 pages reserved
[2753909.691817] 0 pages hwpoisoned
[2753909.691822] px4_drv: probe of 2-1.4:1.0 failed with error -12

です。

発生環境は

HW: HP ML110 G7
uname -a: Linux 4.9.0-8-amd64 #1 SMP Debian 4.9.110-3+deb9u6 (2018-10-08) x86_64 GNU/Linux
ditribution: Debian GNU/Linux 9 (stretch)
px4_drv version: 59d380d
Tuner: PX-W3PE4

です。
dmesgを読んだ限りだとページキャッシュに乗っているページを追い出す時に失敗しているようなので、こちらの環境設定の問題かもしれませんが、数百MB単位でメモリが空いている時にドライバロードに失敗するのは不自然かなと思います。

WindowsではDriverHost_PX4.exeでfirmwareエラーのいくつかはMessageBoxで表示すべき。

ただのit930x-firmware.bin置き忘れうっかりミスなのですが特定はなかなか困難でした、
 ・TVTest.exe →置いた
 ・EpgDataCap_Bon.exe →置き忘れた

こんな状況でPC再起動直後、スタートアップ&予約でEpgDataCap_Bon.exeが先に起動した場合、
BonDriver_PX4.dllは当然BonDriver::OpenTuner: no receivers available.になります。
TVTest.exeを起動した後はロードされるのでエラーがなくなります。

CreateProcessWされたDriverHost_PX4.exeのエラーなので
TVTest.exe、EpgDataCap_Bon.exeらのログからではわかりません。

DriverHost_PX4.exeのDebugビルドのコンソールログで特定しました。
[ERR] px4_winusb 1: it930x_load_firmware: request_firmware() failed. (ret: -2)
→(misc_win.c) ret = -ENOENT;
ただのit930x-firmware.binファイル有無CreateFileAで開けなかっただけでした。

px4_drv WinUSB版の
導入&安定稼働の難度を下げるために
it930x_load_firmware()内の
dev_err, dev_warnを毎回MessageBoxで表示すべきだと思います。
特に置き忘れとファイルサイズやCRCのチェック等あたりは、
DriverHost::Run()のように早い段階に在るといいように思えます。
(CreateMutexWの後あたり?)

DTV02-1T-Uへ対応できるか

e-better製のDTV02-1T1S-Uに試験的に対応しているそうですが、カードリーダが付属していない下位機種と思われるDTV02-1T-Uにも使えますか?実際に試したところ、カーネルモジュールはロードされているのですが、usbデバイスを接続しても/devディレクトリに新たなデバイスファイルがされません。px4_drvを lsmodで確認したところ、適用されている形跡がありません。USBデバイスに適用させるドライバを指定することはできますか?

チューナーが故障しているか分からない

一週間ほど前からうまく録画できず録画鯖とは別マシンで動作確認をしたところエラーが出ました。
it930x_ctrl_msg でのエラーについて #11 と同じく故障だと思うのですが確証が持てないため質問させて頂きました。
画像で申し訳ないのですが以下がエラー内容です。

スクリーンショット 2022-04-30 175741
1

it930x_ctrl_msg でのエラーについて

Ubuntu 20.04.2 LTS
px4_drv @ 3e02c78
PX-W3U4

上記の環境では、視聴開始から約10分程度でStreamが終了している現象を見て、問題の切り分けをしようとしてます。
視聴アプリのログでは特にエラーが発生していないようですが、dmesgを確認したところ以下のエラーが繰り返されているようでした:

[3694474.720869] px4_usb 1-1.3:1.0: it930x_ctrl_msg: error returned. (result: 23)
[3694474.720878] px4_usb 1-1.3:1.0: it930x_ctrl_msg: operation failed. (cmd: 0x002a, ret: -5)
[3694474.720882] px4_usb 1-1.3:1.0: rt710_read_regs: i2c_comm_master_request() failed. (reg: 0x02, len: 1, ret: -5)
[3694474.720885] px4_usb 1-1.3:1.0: rt710_is_pll_locked: rt710_read_regs() failed. (ret: -5)
[3694474.739845] px4_usb 1-1.3:1.0: it930x_ctrl_msg: error returned. (result: 21)
[3694474.739859] px4_usb 1-1.3:1.0: it930x_ctrl_msg: operation failed. (cmd: 0x002b, ret: -5)
[3694474.739869] px4_usb 1-1.3:1.0: rt710_read_regs: i2c_comm_master_request() failed. (reg: 0x02, len: 1, ret: -5)
[3694474.739876] px4_usb 1-1.3:1.0: rt710_is_pll_locked: rt710_read_regs() failed. (ret: -5)

お手数ですが、上記のエラーの原因をご存知でしょうか?
また、こちらのエラーによって視聴が終了するようなことが起きうるかご存知でしょうか?

よろしくお願いいたします。

定期的に usb_alloc_coherent() failed. が発生する

「recpt1を起動し録画を終了する」という一連の流れを何度も連続して行うと、dmesg上に以下のエラー出力がされることがあります
px4_drv 4-7:1.0: it930x_usb_start_streaming: usb_alloc_coherent() failed.

OSはUbuntu 18.04 LTSで、uname は以下のとおりです
$ uname -a
Linux (コンピュータ名) 4.15.0-43-generic #46-Ubuntu SMP Thu Dec 6 14:45:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

どのようにすれば100%再現するかはわかりませんが、何度もrecpt1の起動と終了を繰り返すとまれに発生します.

安全な取り外しがtrueになっててタスクバーが死ぬ程気になるので対処

地デジのロケフリシステムを作るスレ15
https://mevius.5ch.net/test/read.cgi/avi/1666581918/207
ーー
px4_drvのwinusb版使ってる人向け
安全な取り外しがtrueになっててタスクバーが死ぬ程気になるので対処
infに記載(例はw3pe5)

[PXW3PE5.DeviceInstall]
AddProperty=PXW3PE5.DeviceSetup.AddProperty

[PXW3PE5.DeviceSetup.AddProperty]
{afd97640-86a3-4210-b67c-289c41aabe55},3,0x00000011,,0 ;DEVPKEY_Device_SafeRemovalRequiredOverride=FALSE

割と時間掛かった
GUIDでググっても約100件しか出てこないからまーまー凄いことやってる気がする
https://i.imgur.com/ZjHwMaU.png
ーー

multi_device_power_controlの拡張版が欲しい

解決したい課題

PX-Q3U4では2台目の内部デバイスをPower-ONしたタイミングで、受信中のSチューナーでドロップが発生する。
これを回避する目的で実装されている機能がmulti_device_power_controlであると認識しているが、PX-Q3U4は2チューナー共にPower-ONしている間は常に冷却ファンが回り続け、騒音に悩まされる。

提案内容

2台目デバイスの電源をONにしても受信中のTチューナーではドロップが発生しないことから、新たな電源管理モードを設けてSチューナーにのみ注目した電源連動制御を行い未使用デバイスの電源ONを極力減らす。

具体的には、以下の状態を作りたい

  • Tチューナーは電源連動制御の対象としない
  • Sチューナーを1つでも使用している間は2台の内部デバイスは電源ONの状態を維持
  • 最後のSチューナの使用を終えると、未使用デバイスの電源をOFF

全てのケースを網羅しているわけではありませんが、いくつかケースを列挙してみます。
イメージが伝われば良いのですが。

*以下のOpen/Close処理は、px4_device->open_count==0の状態を前提としています。

ケース1

  1. デバイス1のTチューナーOpen --> デバイス1の電源ON
  2. デバイス2のTチューナーOpen --> デバイス2の電源ON
  3. デバイス1のTチューナーClose --> デバイス2のSチューナーが未使用なのでデバイス1の電源OFF
  4. デバイス2のTチューナーClose --> デバイス1のSチューナーが未使用なのでデバイス2の電源OFF

ケース2

  1. デバイス1のSチューナーOpen --> デバイス1とデバイス2の電源ON
  2. デバイス2のSチューナーOpen --> すでに電源ONなので何もしない
  3. デバイス1のSチューナーClose --> デバイス2でSチューナーが使用中なのでデバイス1の電源OFFしない。デバイス2は使用中なのでデバイス2の電源OFFしない
  4. デバイス2のSチューナーClose --> デバイス1のSチューナーが未使用なのでデバイス2の電源OFF。デバイス1は未使用状態なのでデバイス1の電源OFF

ケース3

  1. デバイス1のSチューナーOpen --> デバイス1とデバイス2の電源ON
  2. デバイス2のTチューナーOpen --> すでに電源ONなので何もしない
  3. デバイス1のSチューナーClose --> デバイス2のSチューナーが未使用なのでデバイス1の電源OFF。デバイス2は使用中なのでデバイス2の電源OFFしない
  4. デバイス2のTチューナーClose --> デバイス1のSチューナーが未使用なのでデバイス2の電源OFF

ケース4

  1. デバイス1のTチューナーOpen --> デバイス1の電源ON
  2. デバイス1のSチューナーOpen --> デバイス1はすでに電源ONなので何もしない。デバイス2の電源ON
  3. デバイス1のSチューナーClose --> デバイス2は未使用なのでデバイス2の電源OFF
  4. デバイス1のTチューナーClose --> デバイス2のSチューナーが未使用なのでデバイス1の電源OFF

0.2.0で`spinlock bad magic`が発生する

Linuxドライバーの解析経験がないため未解析なのですが,以下のようなログが出力されます.

# dmesgからの抜粋
[ 1320.911907] BUG: spinlock bad magic on CPU#0, recpt1/3559
[ 1320.915780]  lock: 0xffffffc03ca47900, .magic: 00000000, .owner: \xffffffe8\xffffff8b\xffffffd\xffffff80\xffffffff\xffffffff\xffffffff/0, .owner_cpu: -1
[ 1320.920032] CPU: 0 PID: 3559 Comm: recpt1 Tainted: G           O    4.4.178-rockchip64 #4
[ 1320.924297] Hardware name: Pine64 Rock64 (DT)
[ 1320.928163] Call trace:
[ 1320.931825] [<ffffff80080882b0>] dump_backtrace+0x0/0x1bc
[ 1320.935827] [<ffffff8008088490>] show_stack+0x24/0x30
[ 1320.939794] [<ffffff80085876ac>] dump_stack+0x98/0xc0
[ 1320.943671] [<ffffff8008105f24>] spin_dump+0x84/0xa4
[ 1320.947471] [<ffffff8008105f74>] spin_bug+0x30/0x3c
[ 1320.951204] [<ffffff8008106024>] do_raw_spin_lock+0x40/0x164
[ 1320.955037] [<ffffff8008bc2d00>] _raw_spin_lock+0x20/0x2c
[ 1320.958854] [<ffffff8008bc12cc>] __mutex_lock_slowpath+0x5c/0x11c
[ 1320.962748] [<ffffff8008bc13c8>] mutex_lock+0x3c/0x50
[ 1320.966547] [<ffffff8000c7760c>] rt710_sleep+0x38/0x74 [px4_drv]
[ 1320.970433] [<ffffff8000c728f8>] px4_tsdev_open+0x250/0x5f0 [px4_drv]
[ 1320.974351] [<ffffff80081f917c>] chrdev_open+0x15c/0x168
[ 1320.978109] [<ffffff80081f238c>] do_dentry_open+0x288/0x2e4
[ 1320.981835] [<ffffff80081f35d4>] vfs_open+0x80/0x84
[ 1320.985489] [<ffffff80082027f8>] path_openat+0xc1c/0xdf4
[ 1320.989161] [<ffffff8008203e34>] do_filp_open+0x48/0x94
[ 1320.992803] [<ffffff80081f397c>] do_sys_open+0x158/0x238
[ 1320.996402] [<ffffff80081f3ae0>] SyS_openat+0x3c/0x4c
[ 1320.999926] [<ffffff8008082f8c>] __sys_trace_return+0x0/0x4
[ 1321.003596] Unable to handle kernel NULL pointer dereference at virtual address 00000000
[ 1321.007586] pgd = ffffffc02ca85000
[ 1321.011102] [00000000] *pgd=0000000000000000, *pud=0000000000000000

ログにも記載されていますが,以下の環境で発生を確認しました.

  • HW: ROCK64
  • uname -a: Linux $HOST 4.4.178-rockchip64 #4 SMP Wed May 8 19:34:01 CEST 2019 aarch64 GNU/Linux
  • Distribution: Armbian (Debian Stretch)
  • px4_drv: 2bab256 (v0.2.0)
    • DKMS使用
  • stz2012/recpt1: 36a3f4077044cf9b06e3a12f092aff187fa844d6 (master HEAD)
  • Tuner: PX-W3U4(チューナーデバイス数:GRx2 BS/CSx2)

361ba3e では発生しないため,これ以降のコミットに原因があるようです.

問題が発生すると,load averageが2や4になります.ROCK64は4コアです.

デッドロックが発生しているのもと推測していますが,ドライバー不具合の解析経験はないので,参考程度の意見だと受け止めてください.

録画が開始されない

ubuntu20.04LTSでこちらのドライバを利用させていただき、デバイスの認識まではできたのですが
recpt1で録画しようとすると下記のようなエラーを吐き、空ファイルが生成されるだけで終わります。

~$ recpt1 --device /dev/px4video0 --b25 --strip BS15_0 10 bs0.m2ts
using device: /dev/px4video0
using B25...
enable B25 strip
pid = 29874
device = /dev/px4video0
C/N = 20.280258dBTuner cannot start recording

録画を開始しようとするとdmesgに下記エラーが吐かれます。

[   25.159607] px4_usb 1-1:1.0: px4_chrdev_start_capture 0:0: it930x_purge_psb() failed. (ret: -110)
[  306.070284] px4_usb 1-1:1.0: px4_chrdev_start_capture 0:2: it930x_purge_psb() failed. (ret: -110)

見る限り電波の受信はしているようなのですが、どうにも八方塞がりで助言いただけると嬉しいです。
チューナーデバイス及び、カードリーダーは以下のとおりです。

Bus 001 Device 002: ID 0511:083f N'Able (DataBook) Technologies, Inc. PXW3U4
Bus 002 Device 002: ID 04e6:5116 SCM Microsystems, Inc. SCR331-LC1 / SCR3310 SmartCard Reader

New? Drivers since 2021.04

As of 2021.04 there are new drivers. It is unclear what has changed.

http://plex-net.co.jp/download/202104_PX-W3U4_Driver.zip

I think, but only think that these are the new numbers:

description target size crc32 align firmware_code firmware_segment firmware_partition firmware_crc32
PX-W3U4 BDA Ver202104 64bit it930x 216576 919235eb 4 00029fd0 0002bb40 0002bfd8 df0bf49a
^^ new
vv old
PX-W3U4 BDA Ver.1.4 64bit it930x 207232 a1e8223d 4 00029f50 0002bac0 0002bf58 df0bf49a

I have no idea what has changed.

PX-MLT8PEでトラブル発生

トラブルが発生していますが、PX-MLT8PEが原因かMirakurunが原因かわかりません。

1.トラブル内容
PX-MLT8PE、Mirakurun、EPGStation、Ubuntu20.04の構成で録画サーバーを運用。
地上波6チャンネルの全録を行うと、12~24時間でMirakurunのメモリ利用が600MBを越え、
エンコード処理が8倍速から4倍速へ低下。
PX-Q3PE4で同じ構成のマシンでは、地上波4チャンネル、BS2チャンネルで全録を行っても
メモリ利用は180MB程度で安定しています。エンコード処理は、6倍速以上で安定。

2.原因
何らかのメモリーリークが発生している。Mirakurun 3.5.0で共通であるにも関わらず、
挙動が大きく異なっている。PX-MLT8PEのドライバの可能性はないか。
同時に6チャンネルで行わない場合は、特に問題なく動作していたように思う。

MirakurunかPX-MLT8PEドライバのどちらかに原因があるように考えられますが、
切り分ける何か方法はありますか?

PX-MLT5PE

PX-MLT5PEは対応しているのでしょうか。

PXQ3U4で2つ目のデバイスの登録に失敗することがある

症状

PXQ3U4 で px4video4~7 が生えてこない事がありました

経緯

現在絶賛環境構築中で安定させられておらず、mirakurun側でエラーが頻発する事があります。
その際、 recpt1 直で確認すると Cannot open tuner device: 〜ここらへん?) と出ていました。
自動的に復帰させる方法がわかっておらず。
modprobe で削除/再登録の手順で復帰出来たので、ワークアラウンドとして実施しています。

その際、px4video4~7 が生えてこない事がありましたので、その報告になります。

手順

pi@raspberrypi:/data $ sudo modprobe -r px4_drv
pi@raspberrypi:/data $ sudo modprobe px4_drv
pi@raspberrypi:/data $ ls -al /dev/px*
crw-rw-r-- 1 root video 234, 0 Jan  4 22:26 /dev/px4video0
crw-rw-r-- 1 root video 234, 1 Jan  4 22:26 /dev/px4video1
crw-rw-r-- 1 root video 234, 2 Jan  4 22:26 /dev/px4video2
crw-rw-r-- 1 root video 234, 3 Jan  4 22:26 /dev/px4video3
pi@raspberrypi:/data $ sudo modprobe -r px4_drv
pi@raspberrypi:/data $ sudo modprobe px4_drv
pi@raspberrypi:/data $ ls -al /dev/px*
crw-rw-r-- 1 root video 234, 0 Jan  4 22:26 /dev/px4video0
crw-rw-r-- 1 root video 234, 1 Jan  4 22:26 /dev/px4video1
crw-rw-r-- 1 root video 234, 2 Jan  4 22:26 /dev/px4video2
crw-rw-r-- 1 root video 234, 3 Jan  4 22:26 /dev/px4video3
crw-rw-r-- 1 root video 234, 4 Jan  4 22:26 /dev/px4video4
crw-rw-r-- 1 root video 234, 5 Jan  4 22:26 /dev/px4video5
crw-rw-r-- 1 root video 234, 6 Jan  4 22:26 /dev/px4video6
crw-rw-r-- 1 root video 234, 7 Jan  4 22:26 /dev/px4video7

dmesgの該当部分

[35601.981561] usbcore: deregistering interface driver px4_drv
[35604.581016] px4_drv: px4_drv version 0.2.1
[35604.581216] px4_drv 1-1.3.1:1.0: Multi device power control: disabled
[35604.587105] px4_drv 1-1.3.1:1.0: Firmware is already loaded. version: 1.4.0.0
[35604.725792] px4_drv 1-1.3.1:1.0: tsdev 0: px4video0
[35604.725923] px4_drv 1-1.3.1:1.0: tsdev 1: px4video1
[35604.725996] px4_drv 1-1.3.1:1.0: tsdev 2: px4video2
[35604.726068] px4_drv 1-1.3.1:1.0: tsdev 3: px4video3
[35604.726225] px4_drv 1-1.3.2:1.0: Multi device power control: disabled
[35607.743160] px4_drv 1-1.3.2:1.0: _it930x_control: it930x_bus_ctrl_rx() failed. (cmd: 0x0000, len: 6, rlen: 0, ret: -110)
[35607.743169] px4_drv 1-1.3.2:1.0: _it930x_read_regs: _it930x_control() failed. (reg: 0x4979, len: 1, rlen: 1, ret: -110)
[35607.743177] px4_drv 1-1.3.2:1.0: px4_load_config: it930x_read_reg(0x4979) failed.
[35607.743223] px4_drv: probe of 1-1.3.2:1.0 failed with error -110
[35607.743287] usbcore: registered new interface driver px4_drv
[35616.032501] usbcore: deregistering interface driver px4_drv
[35618.900482] px4_drv: px4_drv version 0.2.1
[35618.900574] px4_drv 1-1.3.1:1.0: Multi device power control: disabled
[35618.904892] px4_drv 1-1.3.1:1.0: Firmware is already loaded. version: 1.4.0.0
[35619.041352] px4_drv 1-1.3.1:1.0: tsdev 0: px4video0
[35619.041479] px4_drv 1-1.3.1:1.0: tsdev 1: px4video1
[35619.041553] px4_drv 1-1.3.1:1.0: tsdev 2: px4video2
[35619.041628] px4_drv 1-1.3.1:1.0: tsdev 3: px4video3
[35619.041779] px4_drv 1-1.3.2:1.0: Multi device power control: disabled
[35619.046096] px4_drv 1-1.3.2:1.0: Firmware is already loaded. version: 1.4.0.0
[35619.182793] px4_drv 1-1.3.2:1.0: tsdev 0: px4video4
[35619.182925] px4_drv 1-1.3.2:1.0: tsdev 1: px4video5
[35619.183001] px4_drv 1-1.3.2:1.0: tsdev 2: px4video6
[35619.183077] px4_drv 1-1.3.2:1.0: tsdev 3: px4video7
[35619.183224] usbcore: registered new interface driver px4_drv

構築中にて、何かしら手順の間違いかもしれませんが報告まで…

Compilation error on Kernel 6.5.5

Hi,
I'm encountering a compilation error on Kernel 6.5.5, can you please look into this:

Driver file (in)    : /usr/src/px4_drv/fwtool/PXW3U4.sys
Firmware file (out) : /PX4DRV/lib/firmware/it930x-firmware.bin

Driver description: PX-W3U4 BDA Ver.1.0 64bit
Firmware length: 2169 bytes
Firmware CRC32: 0b41a994
OK.
Your branch is up to date with 'origin/develop'.
gcc -O2 -Wall   -c -o fwtool.o fwtool.c
gcc -O2 -Wall   -c -o tsv.o tsv.c
gcc -O2 -Wall   -c -o crc32.o crc32.c
gcc -o fwtool fwtool.o tsv.o crc32.o
Archive:  /usr/src/pxw3u4_BDA_ver1x64.zip
Made with MacWinZipper (http://tidajapan.com/macwinzipper)
  inflating: PXW3U4.sys              
'revision.h' was updated.
make[1]: Entering directory '/usr/src/linux-6.5.5-Unraid'
In file included from ./include/linux/linkage.h:7,
                 from ./include/linux/preempt.h:10,
                 from ./include/linux/spinlock.h:56,
                 from ./include/linux/kref.h:16,
                 from /usr/src/px4_drv/driver/ptx_chrdev.h:13,
                 from /usr/src/px4_drv/driver/ptx_chrdev.c:9:
/usr/src/px4_drv/driver/ptx_chrdev.c: In function 'ptx_chrdev_context_create':
./include/linux/export.h:29:22: error: passing argument 1 of 'class_create' from incompatible pointer type [-Werror=incompatible-pointer-types]
   29 | #define THIS_MODULE (&__this_module)
      |                     ~^~~~~~~~~~~~~~~
      |                      |
      |                      struct module *
/usr/src/px4_drv/driver/ptx_chrdev.c:573:35: note: in expansion of macro 'THIS_MODULE'
  573 |         ctx->class = class_create(THIS_MODULE, name);
      |                                   ^~~~~~~~~~~
In file included from ./include/linux/device.h:31,
                 from ./include/linux/cdev.h:8,
                 from /usr/src/px4_drv/driver/ptx_chrdev.h:16,
                 from /usr/src/px4_drv/driver/ptx_chrdev.c:9:
./include/linux/device/class.h:230:54: note: expected 'const char *' but argument is of type 'struct module *'
  230 | struct class * __must_check class_create(const char *name);
      |                                          ~~~~~~~~~~~~^~~~
/usr/src/px4_drv/driver/ptx_chrdev.c:573:22: error: too many arguments to function 'class_create'
  573 |         ctx->class = class_create(THIS_MODULE, name);
      |                      ^~~~~~~~~~~~
In file included from ./include/linux/device.h:31,
                 from ./include/linux/cdev.h:8,
                 from /usr/src/px4_drv/driver/ptx_chrdev.h:16,
                 from /usr/src/px4_drv/driver/ptx_chrdev.c:9:
./include/linux/device/class.h:230:29: note: declared here
  230 | struct class * __must_check class_create(const char *name);
      |                             ^~~~~~~~~~~~
In file included from ./include/linux/device.h:15,
                 from /usr/src/px4_drv/driver/px4_usb.c:17:
/usr/src/px4_drv/driver/px4_usb.c: In function 'px4_usb_probe':
./include/linux/dev_printk.h:150:31: warning: this statement may fall through [-Wimplicit-fallthrough=]
  150 |         dev_printk_index_wrap(_dev_info, KERN_INFO, dev, dev_fmt(fmt), ##__VA_ARGS__)
      |                               ^
./include/linux/dev_printk.h:110:17: note: in definition of macro 'dev_printk_index_wrap'
  110 |                 _p_func(dev, fmt, ##__VA_ARGS__);                       \
      |                 ^~~~~~~
/usr/src/px4_drv/driver/px4_usb.c:120:25: note: in expansion of macro 'dev_info'
  120 |                         dev_info(dev, "Multi-device power control: %s\n",
      |                         ^~~~~~~~
/usr/src/px4_drv/driver/px4_usb.c:123:17: note: here
  123 |                 case USB_PID_PX_W3U4:
      |                 ^~~~
/usr/src/px4_drv/driver/px4_usb.c:139:38: warning: this statement may fall through [-Wimplicit-fallthrough=]
  139 |                         pxmlt5_model = PXMLT5U_MODEL;
      |                         ~~~~~~~~~~~~~^~~~~~~~~~~~~~~
/usr/src/px4_drv/driver/px4_usb.c:141:17: note: here
  141 |                 case USB_PID_PX_MLT5PE:
      |                 ^~~~
/usr/src/px4_drv/driver/px4_usb.c:154:38: warning: this statement may fall through [-Wimplicit-fallthrough=]
  154 |                         pxmlt8_model = PXMLT8PE3_MODEL;
      |                         ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
/usr/src/px4_drv/driver/px4_usb.c:156:17: note: here
  156 |                 case USB_PID_PX_MLT8PE5:
      |                 ^~~~
cc1: some warnings being treated as errors

Cheers,
Christoph

Linux 5.18 と Intel 11世代以降の CPU でカーネルモジュールが動作しない

Linux 5.18 と Intel 11世代以降の CPU でカーネルモジュールが読み込まれず、デバイスファイルが生成されませんでした。

dmseg を見ると、以下のエラーが発生していました。

[    2.989685] px4_drv: loading out-of-tree module taints kernel.
[    3.015334] px4_drv: module verification failed: signature and/or required key missing - tainting kernel
[    3.016303] traps: Missing ENDBR: init_module+0x0/0x1a [px4_drv]
[    3.016322] ------------[ cut here ]------------
[    3.016323] kernel BUG at arch/x86/kernel/traps.c:252!
[    3.016329] invalid opcode: 0000 [#1] PREEMPT SMP NOPTI
[    3.016333] CPU: 3 PID: 251 Comm: systemd-udevd Tainted: G           OE     5.18.14-arch1-1 #1 2cce37e37e4ad1ef84b589b4dfa593feee5baa49
[    3.016338] Hardware name: Intel(R) Client Systems NUC11PAHi3/NUC11PABi3, BIOS PATGL357.0035.2020.1113.1353 11/13/2020
[    3.016341] RIP: 0010:exc_control_protection+0xc2/0xd0
[    3.016347] Code: 8b 93 80 00 00 00 be f9 00 00 00 48 c7 c7 33 ec 26 b5 e8 81 8d 4d ff e9 72 ff ff ff 48 c7 c7 1a ec 26 b5 e8 02 24 fb ff 0f 0b <0f> 0b 66 66 2e 0f 1f 84 00 00 00 00 00 90 66 0f 1f 00 55 53 48 89
[    3.016353] RSP: 0018:ffffab82003bfcd8 EFLAGS: 00010002
[    3.016356] RAX: 0000000000000034 RBX: ffffab82003bfcf8 RCX: 0000000000000027
[    3.016359] RDX: 0000000000000000 RSI: 0000000000000001 RDI: ffff93d2a87a16a0
[    3.016362] RBP: 0000000000000003 R08: 0000000000000000 R09: ffffab82003bfaf8
[    3.016365] R10: 0000000000000003 R11: ffffffffb5acaa08 R12: 0000000000000000
[    3.016367] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
[    3.016370] FS:  00007f7033868480(0000) GS:ffff93d2a8780000(0000) knlGS:0000000000000000
[    3.016373] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[    3.016376] CR2: 00007f7032950000 CR3: 00000001047dc006 CR4: 0000000000f70ee0
[    3.016379] PKRU: 55555554
[    3.016381] Call Trace:
[    3.016384]  <TASK>
[    3.016386]  asm_exc_control_protection+0x25/0x30
[    3.016391] RIP: 0010:init_module+0x0/0x1a [px4_drv]
[    3.016403] Code: c0 0f 95 c0 c3 cc cc cc cc 66 66 2e 0f 1f 84 00 00 00 00 00 66 0f 1f 00 0f 1f 44 00 00 8b 47 38 85 c0 0f 95 c0 c3 cc cc cc cc <66> 0f 1f 00 0f 1f 44 00 00 48 c7 c7 d0 65 b2 c0 e8 67 13 e5 f3 e9
[    3.016408] RSP: 0018:ffffab82003bfda8 EFLAGS: 00010246
[    3.016410] RAX: 0000000000000000 RBX: ffffffffc0b20a06 RCX: 0000000000000000
[    3.016413] RDX: 0000000000000000 RSI: ffffffffc0b20a06 RDI: ffffab82003bfd90
[    3.016416] RBP: ffffab82003bfdb0 R08: 0000000000000010 R09: ffff93d10405bf40
[    3.016418] R10: ffff93d1039b8700 R11: ffff93d2b07fc000 R12: 0000000000000000
[    3.016421] R13: 000055c2910b100d R14: 00007f7034375343 R15: ffffab82003bfe48
[    3.016424]  ? ringbuffer_is_readable+0x16/0x16 [px4_drv 3c15070c798705fe9ead6f375364005ae7ed338a]
[    3.016436]  ? ringbuffer_is_readable+0x16/0x16 [px4_drv 3c15070c798705fe9ead6f375364005ae7ed338a]
[    3.016449]  do_one_initcall+0x5a/0x220
[    3.016455]  do_init_module+0x4a/0x250
[    3.016459]  __do_sys_init_module+0x138/0x1b0
[    3.016464]  do_syscall_64+0x5c/0x90
[    3.016468]  ? exc_page_fault+0x74/0x170
[    3.016471]  entry_SYSCALL_64_after_hwframe+0x61/0xcb
[    3.016475] RIP: 0033:0x7f703420e99e
[    3.016478] Code: 48 8b 0d fd a3 0e 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa 49 89 ca b8 af 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d ca a3 0e 00 f7 d8 64 89 01 48
[    3.016483] RSP: 002b:00007fff5a7d6328 EFLAGS: 00000246 ORIG_RAX: 00000000000000af
[    3.016486] RAX: ffffffffffffffda RBX: 000055c290f64520 RCX: 00007f703420e99e
[    3.016489] RDX: 00007f7034375343 RSI: 000000000005ea1d RDI: 000055c2910525f0
[    3.016492] RBP: 00007f7034375343 R08: 27d4eb2f165667c5 R09: 85ebca77c2b2ae63
[    3.016494] R10: 00000000000e9631 R11: 0000000000000246 R12: 0000000000020000
[    3.016497] R13: 000055c290f63be0 R14: 000055c290f64520 R15: 000055c290f66bb0
[    3.016501]  </TASK>
[    3.016502] Modules linked in: px4_drv(OE+) fjes(+) acpi_cpufreq(-) drm_buddy ttm drm_dp_helper thunderbolt(+) ucsi_acpi intel_gtt typec_ucsi nft_limit typec roles wmi nft_ct nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 nf_tables nfnetlink tpm_crb tpm_tis video tpm_tis_core tpm rng_core vfat fat acpi_pad acpi_tad mac_hid crypto_user fuse bpf_preload ip_tables x_tables btrfs blake2b_generic libcrc32c crc32c_generic xor raid6_pq rtsx_pci_sdmmc mmc_core crc32c_intel nvme xhci_pci rtsx_pci nvme_core xhci_pci_renesas
[    3.016542] ---[ end trace 0000000000000000 ]---
[    3.016544] RIP: 0010:exc_control_protection+0xc2/0xd0
[    3.016548] Code: 8b 93 80 00 00 00 be f9 00 00 00 48 c7 c7 33 ec 26 b5 e8 81 8d 4d ff e9 72 ff ff ff 48 c7 c7 1a ec 26 b5 e8 02 24 fb ff 0f 0b <0f> 0b 66 66 2e 0f 1f 84 00 00 00 00 00 90 66 0f 1f 00 55 53 48 89
[    3.016553] RSP: 0018:ffffab82003bfcd8 EFLAGS: 00010002
[    3.016556] RAX: 0000000000000034 RBX: ffffab82003bfcf8 RCX: 0000000000000027
[    3.016558] RDX: 0000000000000000 RSI: 0000000000000001 RDI: ffff93d2a87a16a0
[    3.016561] RBP: 0000000000000003 R08: 0000000000000000 R09: ffffab82003bfaf8
[    3.016563] R10: 0000000000000003 R11: ffffffffb5acaa08 R12: 0000000000000000
[    3.016566] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
[    3.016569] FS:  00007f7033868480(0000) GS:ffff93d2a8780000(0000) knlGS:0000000000000000
[    3.016572] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[    3.016574] CR2: 00007f7032950000 CR3: 00000001047dc006 CR4: 0000000000f70ee0
[    3.016577] PKRU: 55555554

Linux 5.18 で Indirect Branch Tracking という仕組みが導入されたらしく、Tiger Lake 以降の CPU で IBT が動作するようです。
現状ではカーネルパラメータで ibt=off として無効化することで正しくカーネルモジュールが読み込まれるようになります。

確認した環境は以下の通りです。
px4_drv: 7fa9f05 with pxw3u4_BDA_ver1x64
CPU: 11th Gen Intel(R) Core(TM) i3-1115G4 @ 3.00GHz
Kernel: Linux localhost 5.18.14-arch1-1 #1 SMP PREEMPT_DYNAMIC Sat, 23 Jul 2022 11:46:17 +0000 x86_64 GNU/Linux

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.