在標准C中,isdigit函數可以用來判斷字符是否為0~9之間的數字。比如:int a = isdigit(1);int b = isdigit(a);int c = isdigit(3);可以使用宏定義去實現這個簡單的函數,如下所示:#define
實現min和max這兩個函數,可以有三種形式:1)定義宏;2)定義函數; 3)定義inline函數。以定義宏舉例,一般都是以下形式:#define min(x,y) ((x)>(y)?(y):(x))#define max(x,y) ((x)&
Linux實現中斷處理內核是怎麼知道應用程序要調用系統調用的呢?或者說應用程序怎麼通知系統內核自己需要執行一個系統調用,這是通過軟中斷實現的,通過引發一個異常來促使系統切換到內核態去執行異常處理程序PS:什麼時候會從用戶態切換到內核態呢?1.中斷;2
Linux內核編程:container_of解析#define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__
在Linux內核中廣泛了應用了offsetof()宏和container_of()宏,offsetof()相對比較簡單就不贅述了,主要講講對container_of()宏的一些疑惑,其作用是根據結構體內部某個成員的指針反推出整個結構體的地址,對於內核
在Linux 內核中,container_of 函數使用非常廣,例如 Linux內核鏈表 list_head、工作隊列work_struct中。在Linux 內核中有一個大名鼎鼎的宏container_of(),這個宏是用來干嘛的呢?我們先來看看它在
1、前言 最近項目中用到一個環形緩沖區(ring buffer),代碼是由linux內核的kfifo改過來的。緩沖區在文件系統中經常用到,通過緩沖區緩解cpu讀寫內存和讀寫磁盤的速度。例如一個進程A產生數據發給另外一個進程B,進程B需要對進程A傳的
1、前言 最近寫代碼需用到鏈表結構,正好公共庫有關於鏈表的。第一眼看時,覺得有點新鮮,和我之前見到的鏈表結構不一樣,只有前驅和後繼指針,而沒有數據域。後來看代碼注釋發現該代碼來自linux內核,在linux源代碼下include/Lish.h下。
Linux kernal 鬼斧神工,博大精深,讓人歎為觀止,拍手叫絕。然匠心獨運的設計並非撲朔迷離、盤根錯節,真正的匠心獨運乃辭簡理博、化繁為簡,在簡潔中昭顯優雅和智慧,kfifo就是這樣一種數據結構,它就是這樣簡約高效,匠心獨運,妙不可言,下面就跟
想實現個循環緩沖區(Circular Buffer),搜了些資料多數是基於循環隊列的實現方式。使用一個變量存放緩沖區中的數據長度或者空出來一個空間來判斷緩沖區是否滿了。偶然間看到分析Linux內核的循環緩沖隊列kfifo的實現,確實極其巧妙。kfif
今天給大家帶來的是Linux內核啟動過程概述。希望能夠幫助大家更好的理解Linux內核的啟動,並且創造出自己的內核^_^ Linux的啟動代碼真的挺大,從匯編到C,從Makefile到LDS文件,需要理解的東西很多。畢竟Linux內核是由很多人,花
《Linux內核設計與實現》讀書筆記,本篇簡單介紹內核相關的基本概念。Linux內核設計與實現 第二版下載地址: http://www.linuxidc.com/Linux/2011-05/35530.htmLinux內核設計與實現(原書第3版) 清
1.簡介 在內核調試中,會經常出現內核僵死的問題,也就是發生死循環,內核不能產生調度。導致內核失去響應。這種情況下我們可以采用修改系統內核中的系統時鐘的中斷來定位發生僵死的進程和函數名稱。因為內核系統系統時鐘采用的是硬件中斷的形式存在,所以,軟件發
1、簡介(基於s3c2440 linux)在內核調試技術之中,最簡單的就是printk的使用了,它的用法和C語言應用程序中的printf使用類似,在應用程序中依靠的是stdio.h中的庫,而在linux內核中沒有這個庫,所以在linux內核中,使用這
1、簡介在上一篇中,在內核中使用printk可以講調試信息保存在log_buf緩沖區中,可以使用命令 #cat /proc/kmsg 將緩沖區的數區的數數據打印出來,今天我們就來研究一下,自己寫kmsg這個文件,我們取名叫做 mymsg。
在用QEMU + GDB 調試Linux內核時,遇到一個gdb的bug:“Remote g packet reply is too long” ,記錄一下。1. 實驗環境1. qemu 版本:luzeshu@loca
很久以前的編譯Linux內核使用的腳本,翻出來記錄一下#!/bin/bashexport ARCH=armexport CROSS_COMPILE=/opt/arm-cross-compile/arm-none-linux-gnueabi-2014-