最新記事

AlmaLinux 8またはCentOS 7では、vm.swappiness = 0はスワップが完全に無効になっていることを意味しますか?
centos
linux-kernel
swap
ram
alma-linux

AlmaLinux 8またはCentOS 7では、vm.swappiness = 0はスワップが完全に無効になっていることを意味しますか?

vm.swappiness=1長年にわたってsysctl.confで利用可能なRAMが十分であるにもかかわらず(キャッシュ側でほとんどいっぱいになり、通常はまだ4GBの空き容量がありますが、「使用可能」はまだかなり無料です)、スワップ領域は引き続き使用されます問題がありました。時にはほとんどいっぱいです。 私はスワップをまったく使用したくありません。必須。 私は今読んだ。2019年のこの回答でそれ: swappiness = 0は、できるだけ長く物理メモリからプロセスをスワップしないようにカーネルに指示します。 しかし、私も読んだ。この2012年の回答からそれ: 交換性=0: カーネルバージョン3.5以降:交換性を無効にします。 3.5以前のカーネルバージョン:可能であれば、物理メモリ内のプロセスを交換しないでください。 それで混乱しています...vm.swappiness=0スワップを完全に無効にする必要がありますか、それとも必要なときにスワップを使い続けるべきですか? 私のサーバーのカーネルバージョン: 4.18(アルマLinux 8) 3.10(セントOS 7)

Admin

MCP251xドライバの欠落
linux-kernel
drivers
nvidia
canbus

MCP251xドライバの欠落

mcp251xカーネル4.9.253-tegraを搭載したLinuxシステムにドライバをインストールしようとしましたが、次のコマンドを使用しました。 # modprobe mcp251x コマンドで確認してみる # dmesg | grep mcp251x しかし、何も表示されません。 ドライバがフォルダにあります。 /lib/modules/4.9.253-tegra/kernel/drivers/net/can/spi/mcp251x.ko それでもロードされません。 このカーネルバージョンでこのドライバを正しくインストールする方法は? 編集する: 私はjetsonカーネル4.9.253-tegraを使用します。 mcp251xを接続するためにmodprobeを使用しました。 lsmod出力の表示 V缶3597 0 大丈夫 46600 0 mcp251x 13742 0 can_dev 13592 1 mcp251x ヒューズ 104554 3 xt_conntrack 3609 1 ipt_MASQUERADE 2346 1 nf_nat_masquerade_ipv4 3111 1 ipt_MASQUERADE nf_conntrack_netlink 29413 0 nfnetlink 7959 2 nf_conntrack_netlink xt_address タイプ 3670 2 iptable_filter 2481 1 iptable_nat 2882 1 nf_conntrack_ipv4 11992 2 nf_defrag_ipv4 1836 1 nf_conntrack_ipv4 nf_nat_ipv4 6712 1 iptable_nat nf_nat 20406 2 nf_nat_masquerade_ipv4,nf_nat_ipv4 nf_conntrack 106659 6 nf_conntrack_ipv4, nf_conntrack_netlink, nf_nat_masquerade_ipv4, xt_conntrack, nf_nat_ipv4, nf_nat br_netfilter 16216 0 ZRAM 25920 4 適用範囲 48718 0 ユーザースペース警告5828 0 NVGPU 1589200 13 ip_tables 19441 2 iptable_filter,iptable_nat x_tables 28951 5 ip_tables, iptable_filter, ipt_MASQUERADE, xt_addrtype, xt_conntrack 注文する dmesg | grep -i mcp 何も表示されません。

Admin

Linuxの最大シリアルポート速度
linux-kernel
serial-port
irq

Linuxの最大シリアルポート速度

最高速度が25Mbpsであると主張する新しいxr17v358シリアルカードを取り付けました。 (何らかの理由でこれは1950年代のスピードに達していない唯一のカードです。このアプリケーションでは1970年代のスピードに満足しています)。 Linuxでどのくらい速く実行されると予想できますか? 1ポートで2.7Mbpsのループバックテストを正常に実行しました。はい、私はLinuxの愚かな「カスタム転送速度」コードを使用し、オシロスコープを使用して速度を再確認しました。また、それぞれ 1.0Mbps で 2 つのポートを同時に実行することもできます。ただし、2 つの 2.0 Mbps ポートを同時に使用しようとすると、次の結果が表示されます。 serial8250: too much work for irq103 その後、すべてのシリアルポートが完全に動作を停止しました。これはxr17v358ドライバのバグ/誤った設定ですか、それともLinux自体のバグ/誤った設定ですか? 他の人が上記のエラーメッセージの原因を調査しました。そして発見これはハードウェアエラーであるか、CPUと比較してデータ入力速度が速すぎます。このコンピュータには完全に動作するギガビットイーサネットカードがあるので(5GHz Skylakeプロセッサと400Gb / sのメモリ帯域幅は言うまでもありません)、CPUが25Mbpsのシリアルデータを処理するのに問題がないと思いますか?

Admin

初心者:MMM-AssistantMk2およびMMM-Hotwordで使用するマイクとスピーカーを設定できません。
linux-kernel
raspberry-pi
raspbian

初心者:MMM-AssistantMk2およびMMM-Hotwordで使用するマイクとスピーカーを設定できません。

GoogleのAIY HATのみを設定してみましたが、シングルカードとデバイスの下にスピーカーとマイク(hw:0,0)が表示されます。 Blue Snowball(hw:1,0)というスタンドアロンUSBマイクとスピーカー用のgoogle AIY HAT(hw:0)も試してみましたが、うまくいきませんでした。 間違い: 2020-04-26 15:48:17.583] [LOG] [HOTWORD] Detector starts listening. [2020-04-26 15:48:17.701] [LOG] [HOTWORD:LPCM16] arecord: main:828: [2020-04-26 15:48:17.703] [LOG] [HOTWORD:LPCM16] audio open error: Device or resource busy [2020-04-26 15:48:17.706] [LOG] [HOTWORD] Final Result: { detected: false } [2020-04-26 15:48:17.724] [LOG] [HOTWORD] begins. [2020-04-26 15:48:17.726] [LOG] [HOTWORD] Detector starts listening. [2020-04-26 15:48:17.808] [LOG] [HOTWORD:LPCM16] arecord: main:828: audio open error: Device or resource busy ラズベリーパイバージョン: pi@raspberrypi:~ $ cat /etc/os-release PRETTY_NAME="Raspbian GNU/Linux 10 (buster)" NAME="Raspbian GNU/Linux" VERSION_ID="10" VERSION="10 (buster)" VERSION_CODENAME=buster ID=raspbian ID_LIKE=debian HOME_URL="http://www.raspbian.org/" SUPPORT_URL="http://www.raspbian.org/RaspbianForums" BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs" pi@raspberrypi:~ $ 記録-l: @raspberrypi:~ $ arecord -l **** List of CAPTURE Hardware Devices **** card 0: sndrpigooglevoi [snd_rpi_googlevoicehat_soundcar], device 0: Google voiceHAT SoundCard HiFi voicehat-codec-0 [Google voiceHAT SoundCard HiFi voicehat-codec-0] Subdevices: 0/1 Subdevice #0: subdevice #0 card 1: Snowball [Blue Snowball], device 0: USB Audio [USB Audio] Subdevices: 0/1 Subdevice #0: subdevice #0 プレイ-l: pi@raspberrypi:~ $ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: sndrpigooglevoi [snd_rpi_googlevoicehat_soundcar], device 0: Google voiceHAT SoundCard HiFi voicehat-codec-0 [Google voiceHAT SoundCard HiFi voicehat-codec-0] Subdevices: 0/1 .asoundrc: pcm.!default{ type asym playback.pcm{ type hw card 0 } capture.pcm{ type plug slave.pcm "hw:1,0" } } ctl.!default{ type hw card 0 } 構成ファイル /* Magic Mirror Config Sample * * By Michael Teeuw http://michaelteeuw.nl * MIT Licensed. * * For more information how you can configurate this file * See https://github.com/MichMich/MagicMirror#configuration * */ var config = { address: "localhost", // Address to listen on, can be: // - "localhost", "127.0.0.1", "::1" to listen on loopback interface // - another specific IPv4/6 to listen on a specific interface // - "", "0.0.0.0", "::" to listen on any interface // Default, when address config is left out, is "localhost" port: 8080, ipWhitelist: ["127.0.0.1", "::ffff:127.0.0.1", "::1"], // Set [] to allow all IP addresses // or add a specific IPv4 of 192.168.1.5 : // ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.1.5"], // or IPv4 range of 192.168.3.0 --> 192.168.3.15 use CIDR format : // ["127.0.0.1", "::ffff:127.0.0.1", "::1", "::ffff:192.168.3.0/28"], language: "en", timeFormat: 24, units: "metric", // serverOnly: true/false/"local" , // local for armv6l processors, default // starts serveronly and then starts chrome browser // false, default for all NON-armv6l devices // true, force serveronly mode, because you want to.. no UI on this device modules: [ { module: "alert", }, { module: "updatenotification", position: "top_bar" }, { module: "clock", position: "top_left" }, { module: "calendar", header: "US Holidays", position: "top_left", config: { calendars: [ { symbol: "calendar-check", url: "webcal://www.calendarlabs.com/ical-calendar/ics/76/US_Holidays.ics" } ] } }, { module: "compliments", position: "lower_third" }, { module: "currentweather", position: "top_right", config: { location: "New York", locationID: "", //ID from http://bulk.openweathermap.org/sample/city.list.json.gz; unzip the gz file and find your city appid: "YOUR_OPENWEATHER_API_KEY" } }, { module: "weatherforecast", position: "top_right", header: "Weather Forecast", config: { location: "New York", locationID: "5128581", //ID from http://bulk.openweathermap.org/sample/city.list.json.gz; unzip the gz file and find your city appid: "YOUR_OPENWEATHER_API_KEY" } }, { module: "newsfeed", position: "bottom_bar", config: { feeds: [ { title: "New York Times", url: "http://www.nytimes.com/services/xml/rss/nyt/HomePage.xml" } ], showSourceTitle: true, showPublishDate: true, broadcastNewsFeeds: true, broadcastNewsUpdates: true } }, { module: "MMM-Hotword", position: "top_right", config: { chimeOnFinish: null, mic: { recordProgram: "arecord", device: "plughw:1" }, models: [ { hotwords : "smart_mirror", file : "smart_mirror.umdl", sensitivity : "0.5", }, ], commands: { "smart_mirror": { notificationExec: { notification: "ASSISTANT_ACTIVATE", payload: (detected, afterRecord) => { return {profile:"default"} } }, restart:false, afterRecordLimit:0 } } } }, { module: "MMM-AssistantMk2", position: "top_right", config: { deviceLocation: { coordinates: { latitude: 37.5650168, // -90.0 - +90.0 longitude: 126.8491231, // -180.0 - +180.0 }, }, record: { recordProgram : "arecord", device : "plughw:1", }, notifications: { ASSISTANT_ACTIVATED: "HOTWORD_PAUSE", ASSISTANT_DEACTIVATED: "HOTWORD_RESUME", }, useWelcomeMessage: "brief today", profiles: { "default" : { lang: "en-US" } }, } }, ] }; /*************** DO NOT EDIT THE LINE BELOW ***************/ if (typeof module !== "undefined") {module.exports = config;}

Admin

TCP / IPプロトコルはクライアントをどのように区別しますか?
linux
kernel
linux-kernel
tcp
socket

TCP / IPプロトコルはクライアントをどのように区別しますか?

リスニングソケットを作成すると、ディスクリプタ(ルートディスクリプタであると仮定)を返し、そのディスクリプタをアドレスにバインドします。新しいクライアント接続が可能になるたびに、ルート記述子は私たちに通知し、新しい接続を受け入れ、各クライアントに固有の記述子(クライアント記述子であると仮定)を受け取ります。これから、この記述子を使用してこのクライアントと通信できます。クライアント情報は、クライアント記述子が指す別の inode に保存されます。したがって、Linux はそのクライアントデータをその記述子に渡すことができます。 上記の内容が正しい場合(間違って理解した場合は訂正してください)、質問があります。 inodeに保存されているクライアント情報は何ですか? Linuxはどのようにクライアントを一意に識別しますか?

Admin

全二重PCMブリッジ
linux-kernel
drivers
audio
alsa
device-tree

全二重PCMブリッジ

私は2つのハードウェアPCMを持つLinuxを実行する組み込みデバイスを開発しています4.14.79。 1つはBluetoothチップに接続され、もう1つはGSM電話に接続されます。 bt-in -> gsm-out私の目標は、通話を処理するために全二重構成でこれらのストリーム(および)を接続することです。gsm-in -> bt-out実際、Bluetoothは電話に接続されています。 私のコーデックは機能しており、両方のカードで使用できますaplay。arecord私は(パフォーマンスのために)カーネル側でこれらのチャンネルを一緒に接続するソリューションを探しています。これまで私が見つけたもの: 差動パルスコード変調:ドライバを交換するためにDTを編集しようとしましたが、まだsimple-scu-card互いに通信しない2つの別々の(動作する)カードが残ります。次のステップはサウンドドライバを調整することです。 snd-aloop:私が知っている限り、私の場合はこの方法は適用されません。私のカードをカードインターフェイスhw:0,0に接続する方法がわかりません。Loopback alsaloop:userspace、しかしうまくいきませんでした。 alsaloop -P hw:1,0 -C hw:0,0 --format S16_LE -c 2 -r 8000 -t 500000 上記のコマンドを実行すると、1フレーム長のカチッと音がしますalsaloop。また、他の期間とバッファサイズを試してみましたが、変更はありませんでした(xrunに奇妙な値があると予想されます)。まもなく追加テストを行う予定です。 Jack限られたリソースのためにおよび/または使用を避けたいと思いますpulseaudio。 私の質問は:以前私と同じ問題を抱えていた人がいて、私にいくつかのリソース/文書/例を提供できる人はいますか? どんなアドバイスも本当にありがとうございます。 気づく:私はこのトピックを数週間フォローしました。この質問に欠落している情報がある場合はお知らせください。

Admin

カーネル空間メモリのリリースによりカーネルがフリーズ
kernel
linux-kernel
drivers
kernel-modules
kernel-panic

カーネル空間メモリのリリースによりカーネルがフリーズ

カーネルモジュールを作成しています。ユーザー空間からバイトを読み書きします。 static ssize_t dev_read(struct file *filep, char *buffer, size_t len, loff_t *offset) { Node *msg; int error_count = 0; // Entering critical section down(&sem); //wait state msg = pop(&l, 0); // No message? No wait! if(!msg) { up(&sem); return -EAGAIN; } len = msg->length; error_count = copy_to_user(buffer, msg->string, msg->length); if (error_count == 0) { current_size -= msg->length; remove_element(&l, 0); up(&sem); return 0; } else { up(&sem); printk(KERN_INFO "opsysmem: Failed to send %d characters to the user\n", error_count); return -EFAULT; // Failed -- return a bad address message (i.e. -14) } } static ssize_t dev_write(struct file *filep, const char *buffer, size_t len, loff_t *offset) { Node *n; // buffer larger than 2 * 1024 bytes if(len > MAX_MESSAGE_SIZE || len == 0) { return -EINVAL; } n = kmalloc(sizeof(Node), GFP_KERNEL); if(!n) { return -EAGAIN; } n->string = (char*) kmalloc(len, GFP_KERNEL); n->length = len; copy_from_user(n->string, buffer, len); // Enter critical section down(&sem); //wait state // buffer is larger than the total list memory (2MiB) if(current_size + len > MAX_LIST_SIZE) { up(&sem); return -EAGAIN; } current_size += len; push(&l, n); up(&sem); // Exit critical section return len; } リンクリストを解放する必要がある関数を削除します。 static void __exit opsysmem_exit(void) { // Deallocate the list of messages down(&sem); destroy(&l); up(&sem); device_destroy(opsysmemClass, MKDEV(majorNumber, 0)); // remove the device class_unregister(opsysmemClass); // unregister the device class class_destroy(opsysmemClass); // remove the device class unregister_chrdev(majorNumber, DEVICE_NAME); // unregister the major number printk(KERN_INFO "charDeviceDriver: Goodbye from the LKM!\n"); } 私の接続リストと破壊機能は次のとおりです。 static void destroyNode(Node *n) { if(n) { destroyNode(n->next); kfree(n->string); n->string = NULL; kfree(n); n = NULL; } } static void destroy(list *l){ if(l) { destroyNode(l->node); } } typedef struct Node { unsigned int length; char* string; struct Node *next; } Node; typedef struct list{ struct Node *node; } list; 質問は次のとおりです。 rmmod私はデバイスドライバを作成し、ドライバとopsysmem_exitkfree()がすべてのメモリから呼び出されることを望みます。 これは、ノード数が少ない場合に機能します。 多数のノード(1000以上)を実行してrmmodeを使用しようとすると、VMはフリーズします。 この問題を診断するためになぜしなければならないのか、そして何をすべきかを知っていますか? 私の関数はあまりにも多くのレベルの再帰を生成しますか? 2000000個のノードに書き込んで再度読んでみると問題ないようです。 rmmodを実行するときにリストが空の場合、すべてがうまく機能します。 編集1:メモリを解放せずにrmmodを実行すると、カーネルがクラッシュしないことがわかりました。ただし、以下のように割り当てられたメモリはすべて漏れます。ケデル

Admin

レジスタ破損したアーキテクチャとはどういう意味ですか?
kernel
linux-kernel
architecture
cpu-architecture

レジスタ破損したアーキテクチャとはどういう意味ですか?

私はRobert LoveのLinuxカーネル開発書を読んでいます。その本では、彼は登録簿が破損している建物について言及しています。レジスタ破損アーキテクチャが何であるかわかりません。これについてご存知の方はご説明ください。 よろしくお願いします。

Admin

オペレーティングシステムでファイルシステムをどのように認識しますか?ファイルシステムでのオペレーティングシステムの役割は何ですか? [閉鎖]
linux
filesystems
linux-kernel
system-calls

オペレーティングシステムでファイルシステムをどのように認識しますか?ファイルシステムでのオペレーティングシステムの役割は何ですか? [閉鎖]

閉鎖。この質問はもう少し尋ねる必要があります集中。現時点では回答は許可されていません。 この質問を改善したいですか?1つの問題にのみ焦点を当てるように質問を更新してください。この記事を編集してください。 閉鎖4年前。 この問題を改善する ファイルシステムとオペレーティングシステム間の仲介者を理解したいと思います。 オペレーティングシステムはファイル操作を担当していますか?

Admin

X86でARM用のカーネルヘッダファイルを作成するには?
linux
linux-kernel
kernel-modules
cross-compilation
linux-headers

X86でARM用のカーネルヘッダファイルを作成するには?

工場カーネル(5.10.110)で使用するARMベースのボードがあります。 カーネルモジュールを手動でビルドするには、カーネルヘッダパッケージが必要です。このパッケージをインストールするには、次を参照してください。文書: sudo dpkg -i /opt/linux-headers-*.deb これにより、次のような構造が作成されます。 /lib/modules/5.10.110$ ls -la total 1584 drwxr-xr-x 1 root root 4096 Apr 29 15:13 . drwxr-xr-x 1 root root 4096 Jul 10 21:36 .. lrwxrwxrwx 1 root root 31 Feb 20 07:05 build -> /usr/src/linux-headers-5.10.110 drwxr-xr-x 2 root root 4096 Feb 20 13:29 extra drwxr-xr-x 1 root root 4096 Feb 20 13:29 kernel -rw-r--r-- 1 root root 327270 Apr 29 15:13 modules.alias -rw-r--r-- 1 root root 346627 Apr 29 15:13 modules.alias.bin -rw-r--r-- 1 root root 28645 Feb 20 13:29 modules.builtin -rw-r--r-- 1 root root 0 Apr 29 15:13 modules.builtin.alias.bin -rw-r--r-- 1 root root 30656 Apr 29 15:13 modules.builtin.bin -rw-r--r-- 1 root root 164216 Feb 20 13:29 modules.builtin.modinfo -rw-r--r-- 1 root root 95077 Apr 29 15:13 modules.dep -rw-r--r-- 1 root root 153551 Apr 29 15:13 modules.dep.bin -rw-r--r-- 1 root root 140 Apr 29 15:13 modules.devname -rw-r--r-- 1 root root 51432 Feb 20 13:29 modules.order -rw-r--r-- 1 root root 468 Apr 29 15:13 modules.softdep -rw-r--r-- 1 root root 163120 Apr 29 15:13 modules.symbols -rw-r--r-- 1 root root 206275 Apr 29 15:13 modules.symbols.bin カーネル全体を再コンパイルして、バージョンを5.10.110から5.10.110に増やす必要があります。5.10.160。 カーネルモジュールをコンパイルしようとすると、必要なヘッダが見つかりません。 5.10.110のBuildフォルダには、次のファイルが含まれています。 /lib/modules/5.10.110/build$ ls -la total 1364 drwxr-xr-x 5 root root 4096 Apr 29 15:03 . drwxr-xr-x 1 root root 4096 Jul 10 22:35 .. -rw-r--r-- 1 root root 220133 Feb 20 07:05 .config -rw-r--r-- 1 root root 68886 Dec 1 2022 Makefile -rw-r--r-- 1 root root 1075160 Feb 20 07:02 Module.symvers drwxr-xr-x 3 root root 4096 Apr 29 15:03 arch drwxr-xr-x 31 root root 4096 Apr 29 15:03 include drwxr-xr-x 17 root root 12288 Apr 29 15:03 scripts バージョン5.10.160の新しいカーネル用のカスタムカーネルモジュールを構築するために、これらのヘッダーをどのように再生成できますか? いろいろ試してみました。カーネルがクロスコンパイルされたシステムからこれらのフォルダをコピーすることは機能しません。これは、 "scripts"フォルダにaarch64(x86_64)で実行されていないシステムコードが含まれているためです。 それから私は5.10.110の "scripts"フォルダをコピーしましたが、これがうまくいくか、害があるのか​​、望ましくない結果になるのかわかりません。 それでは、カスタムカーネルモジュールを構築するために環境をクロスコンパイルする方法は?

Admin

ソフトウェアGUIを使用して物理USB HIDジョイスティック入力をエミュレートします。
linux
linux-kernel
usb
gui
joystick

ソフトウェアGUIを使用して物理USB HIDジョイスティック入力をエミュレートします。

物理USB HIDジョイスティックコントローラから入力を受け取るプログラムがあります。このコントローラを置き換えるソフトウェアGUIを作成し、同じ方法で動作させたいのですが(すべての入力はUSB接続を介して同じ方法で送信されます)。ところで、その部分をどのように処理すべきか難しいですね。 Linuxで物理的なジョイスティックと同じように見えるように、ソフトウェアGUIの入力をどこに書き込む必要がありますか?

Admin