Linuxドライバ_LDD3メモ_カーネルにおけるデータの型

來源:互聯網
上載者:User

カーネルにおけるデータの型        
標準のCのデータ型は、アーキテクチャによってサイズが違います。        

jiffyを用いて時間を計算する場合には、必ずHz(1秒ごとのタイマ割り込み數)を用いて時間をスケーリングしましょう。        
メモリを操作する場合には、1メモリページがPAGE_SIZEバイトであり、4KBではありません。        

バイトオーダー:        
・インクルードファイル<asm/byteorder.h>は、
  CPUのバイトオーダーに従って、「__BIG_ENDIAN」と「__LITTLE_ENDIAN」のどちらかを定義します。        
・#ifdef __LITTLE_ENDIAN條件文の固まりをコーディングしてもよいのですが、
  Linuxカーネルはバイトオーダーの変換を扱うマクロセットを定義しています。        
    マクロ例: cpu_to_le32、le32_to_cpu、be64_to_cpu、le16_to_cpusなど。ポインタの場合は、cpu_to_le32pなど。    
        
データアラインメント:        
・多くのアーキテクチャではアラインされていないデータの転送を試みると、例外が発生します。
  例外ハンドラでデータ転送を処理すると、処理速度が極端に落ちることになります。        
・Linuxでアラインされていないデータにアクセスするときは、下記マクロを使います。        
    get_unaligned(ptr);    
    put_unaligned(val, ptr);    
・アラインメントに関連する別の問題は、プラットフォーム間におけるデータ構造體の移植性です。        
・コンパイラは自動的に構造體に詰め物を挿入して、
  対象のCPU上での效能を上げるために全てのフィールドのアラインを揃える點にも注意してください。

ポインタとエラー値:
    void *ERR_PTR(long error);        //ポインタ型を返す関數は、この関數でエラー値を返すことができます。
    long IS_ERR(const void *ptr);     //返されたポインタがエラーコードかどうかをテストできます
    long PTR_ERR(const void *ptr);     //実際にエラーコードを取り出す

リンクリスト:                                                
カーネル開発者は、汎用的に使える雙方向の環狀リンクリストを実裝しています。
リストを操作する場合には、この機能を使うことをお勧めします。
でも、1つのリストを並行して操作する場合には、自分でロックの仕組みを実裝する必要があります。
    struct list_head { struct list_head *next, *prev; };            //リスト構造體            
    INIT_LIST_HEAD(&todo_list);                                        //リスト初期化            

    list_add(struct list_head *new, struct list_head *head);            //リスト操作
    list_add_tail(struct list_head *new, struct list_head *head);        

    list_del(struct list_head *entry);
    list_del_init(struct list_head *entry);

    list_move(struct list_head *entry, struct list_head *head);
    list_move_tail(struct list_head *entry, struct list_head *head);

    list_for_each(struct list_head *cursor, struct list_head *list)
    など。。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.