Linuxデバイスツリー解析実践ガイド:ソースコードからドライバ紐付けまでの仕組み

デバイスツリーの基本構造とC言語による解析 組み込みLinuxシステムにおいて、デバイスツリー(Device Tree)はハードウェアリソースと周辺機器の接続関係を記述するために不可欠です。C言語を用いてデバイスツリーノードを解析することで、ハードウェア構成情報を動的に取得し、ドライバの移植性を向上させることができます。 デバイスツリーの構造 デバイスツリーソース ...

9月6日 19:26 投稿

Netty ChannelからOSカーネルまで:TCPコネクション管理とepollの詳細解説

Netty ChannelからOSカーネルまで:TCPコネクション管理とepollの詳細解説 本記事は、NettyのChannelがどのようにOSのTCPコネクションと連携し、特にepollメカニズムによって高効率なI/O処理を実現しているのかを深掘りします。TCPコネクションの実態から、その維持メカニズム、そして大量のコネクションを捌くためのOSカーネルとNettyの内部構造まで、段階的に解説してい ...

8月29日 14:22 投稿

Rockchip RK3399 DRM GEMフレームワークの基礎

DRM(Direct Rendering Manager)サブシステムにおいて、GEM(Graphics Execution Manager)はグラフィックスバッファの管理、特にメモリの割り当てと解放を担う重要な役割を果たします。Linuxカーネルではstruct drm_gem_objectがGEMオブジェクトを表現し、各ドライバはこれを拡張して独自のデータを管理します。 GEMオブジェクトの構造体 1. struct drm_gem_object カ ...

8月18日 20:32 投稿

CentOS7.9 で io.Copy がハングする:splice システムコールと古い Linux カーネルの相性問題

事象の概要 Go 1.21.0〜1.21.4 でコンパイルした TCP プロキシが CentOS 7.9(カーネル 3.10.0)上で動作中、io.Copy が永遠に戻らなくなるケースが発生しました。 原因は net.TCPConn.ReadFrom が内部的に使う splice が SPLICE_F_NONBLOCK フラグを失ったことで、ノンブロッキング動作が無効になり、古いカーネルでブロックしていたためです。 Go 1.21.5 で該当フラグが ...

7月23日 22:50 投稿

epoll のカーネルソースを読むための準備

はじめに epoll は Linux カーネル 2.6 で導入された I/O イベント通知機構で、select(2) や poll(2) の代替として利用されます。本記事では、epoll のソースコードを読む前に理解しておくべき基礎知識を整理します。 従来の I/O マルチプレクサの問題点 select(2): 最大 1024 個のファイル記述子しか扱えず、毎回ユーザ空間とカーネル空間の間でデータをコピーする必 ...

6月7日 16:24 投稿

Linux platform デバイスドライバの設計と実装

Linux カーネルにおけるデバイスドライバは、モジュール性と再利用性を高めるために「分離」と「階層化」の設計原則に基づいて構築される。特に、I2C や SPI といったバスに接続されるデバイスだけでなく、SoC 内蔵のペリフェラル(例: GPIO、タイマ、UART など)に対しても、統一された抽象化フレームワークが必要となる。そのため、Linux は物理的なバスを持たないデバイ ...

5月28日 01:16 投稿