Time of Update: 2018-12-04
關於怎麼訂閱可以查看:http://blog.chinaunix.net/uid-26963688-id-3205007.html在訂閱的過程中碰到個回複郵件的格式問題,這個不解決,訂閱是不成功的。錯誤資訊:>>>> ---309136488-1687512366-1367655922=:73926**** Command '---309136488-1687512366-1367655922=:73926' not recognized.>>>>
Time of Update: 2018-12-04
轉自:http://www.2cto.com/os/201203/124813.html切割合并檔案在linux下用split和cat就可以完成。下面舉些執行個體進行說明。1.檔案切割檔案切割模式分為兩種: 文字檔 二進位模式。1.1文字模式文字模式只適用於文字檔,用這種模式切割後的每個檔案都是可讀的。文字模式又分為兩種: 按最大檔案大小切割; 按文本行數切割。1.1.1最大檔案大小切割split -C 5k duanxin
Time of Update: 2018-12-04
轉自:http://www.cnblogs.com/xd502djj/archive/2011/03/01/1968041.html在系統維護的過程中,隨時可能有需要查看 CPU 使用率,並根據相應資訊分析系統狀況的需要。在 CentOS 中,可以通過 top 命令來查看 CPU 使用狀況。運行 top 命令後,CPU 使用狀態會以全屏的方式顯示,並且會處在對話的模式 -- 用基於 top 的命令,可以控制顯示方式等等。退出 top 的命令為 q (在 top 運行中敲 q
Time of Update: 2018-12-04
struct buffer_head { char * b_data; /* pointer to data block (1024 bytes) */ unsigned long b_blocknr; /* block number */ unsigned short b_dev; /* device (0 = free) */ unsigned char b_uptodate; unsigned char b_dirt; /* 0-clean,1-dirty */ unsigned
Time of Update: 2018-12-04
PCI裝置建立過程 這部分分成兩部分學習,一是參考前輩的文章,分析lddbus和sculld兩部分源碼,二是參考ldd3學習pci部分 第一部分ldd_bus聲明了一個bus_type結構的ldd_bus_type:struct bus_type ldd_bus_type = { .name = "ldd", .match = ldd_match, .uevent = ldd_uevent,};將ldd_bus_type添加到核心和從核心卸載的代碼如下:static
Time of Update: 2018-12-04
七:i2c dev節點操作現在來分析上面架構圖中的i2c-dev.c中的部份.這個部份為使用者空間提供了操作adapter的介面.這部份代碼其實對應就晃一個模組.它的初始化函數為:module_init(i2c_dev_init);i2c_dev_init()代碼如下:static int __init i2c_dev_init(void){ int res; printk(KERN_INFO "i2c /dev entries driver/n"); res =
Time of Update: 2018-12-04
頂半部和底半部Linux系統通過將中斷處理常式分成兩部分來解決這個問題。稱為“頂半部”的部分,是實際響應中斷的常式,也就是用request_irq註冊的中斷常式;而所謂的“底半部”是一個被頂半部調度,並在稍後更安全的時間內執行的常式。頂半部處理常式和底半部處理常式之間最大的不同,就是當底半部處理常式執行時,所有的中斷都是開啟的---這就是所謂的在更安全的時間內運行。典型的情況是頂半部儲存裝置的資料到一個裝置特定的換從去並調度它的底半部,然後退出。頂半部所做的操作是非常快的,然後,底半部執行其他必
Time of Update: 2018-12-04
0.11核心維護著3個終端,一個顯示器和鍵盤,另外兩個是串口1,2.
Time of Update: 2018-12-04
自旋鎖:和訊號量不同,自旋鎖可以在不能休眠的代碼中使用,比如中斷處理常式。自旋鎖通常實現為某個整數值中的某個位。希望獲得某特定鎖的代碼測試相關的位。如果鎖可用,則鎖定位被設定,而代碼進入臨界區。相反,如果鎖定被其他人獲得,則代碼進入忙迴圈並重複檢查這個鎖。以上測試並設定的操作必須以原子方式進行。自旋鎖API使用自旋鎖必須包含標頭檔<linux/spinlock.h>,鎖的類型為spinlock_t類型定義同時完成初始化: spinlock_t my_lock = SPIN_LOCK_
Time of Update: 2018-12-04
阻塞型I/O與休眠當一個進程被置入休眠時,他會被標記為一種特殊的狀態並從調度器的運行隊列調走(將該進程加入到等待隊列中,等待喚醒)。休眠中的進程會被擱置在一邊,等待喚醒。要想安全的進行休眠需要注意:1.永遠不要在原子上下文中進入休眠.原子上下文是指:在執行多個步驟時,不能有任何的並發訪問。對休眠來說,我們的驅動程式不能擁有自旋鎖、seqlock或者RCU鎖時休眠。如果我們已經禁止了中斷,也不能休眠。但在擁有訊號量時允許休眠。如果代碼在擁有訊號量時休眠,任何其他等待該訊號量的線程也會休眠,一次擁有
Time of Update: 2018-12-04
裝置檔案的存取控制:獨享裝置,限制每次只有一個使用者訪問(單使用者訪問),阻塞型使用者訪問,開啟時複製裝置。獨享裝置主要是讓驅動程式維護一個atomic_t變數,該變數初始化為1,表明可用,在open時會減小並測試scull_s_available,並在其他進程開啟該裝置時拒絕開啟該裝置。程式碼範例:static atomic_t scull_s_available = ATOMIC_INIT(1);static int scull_s_open(struct inode
Time of Update: 2018-12-04
中斷處理可以讓裝置在產生某個事件時通知處理器的方法就是中斷。一個“中斷”僅是一個訊號,當硬體需要獲得處理器對它的關注時,就可以發送這個訊號。 Linux
Time of Update: 2018-12-04
進階字元裝置驅動一、ioctl大部分裝置除了讀寫能力,還可進行超出簡單的資料轉送之外的操作,所以裝置驅動也必須具備進行各種硬體控制操作的能力. 這些操作常常通過 ioctl 方法來支援,它有和使用者空間版本不同的原型:int (*ioctl) (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long
Time of Update: 2018-12-04
1. SMP 硬體體繫結構:對於 SMP 最簡單可以理解為系統存在多個完全相同的 CPU ,所有 CPU 共用匯流排,擁有自己的寄存器。對於記憶體和外部裝置訪問,由於共用匯流排,所以是共用的。 Linux 作業系統多個 CPU 共用在系統空間上映射相同,是完全對等的。 由於系統中存在多個 CPU ,這是就引入一個問題,當外部裝置產生中斷的時候,具體有哪一個 CPU 進行處理?為此, intel 公司提出了 IO APCI 和 LOCAL APCI 的體繫結構。IO
Time of Update: 2018-12-04
I2c是philips提出的外設匯流排.I2C只有兩條線,一條串列資料線:SDA,一條是時鐘線SCL.正因為這樣,它方便了工程人員的布線.另外,I2C是一種多主機控制匯流排.它和USB匯流排不同,USB是基於master-slave機制,任何裝置的通一:前言I2c是philips提出的外設匯流排.I2C只有兩條線,一條串列資料線:SDA,一條是時鐘線SCL.正因為這樣,它方便了工程人員的布線.另外,I2C是一種多主機控制匯流排.它和USB匯流排不同,USB是基於master-slave機制,任何
Time of Update: 2018-12-04
字元裝置驅動:1.一般我們都採用動態分配裝置號的API:int alloc_chrdev_region(dev_t *dev,unsigned int firstminor,unsigned int count,char *name);dev是經用於輸出的函數,在成功完成調用以後將儲存分配範圍的第一個編號。void unregister_chrdev_region(dev_t first,unsigned int
Time of Update: 2018-12-04
四:i2c driver註冊在分析i2c driver的時候,有必要先分析一下i2c架構的初始化代碼如下:static int __init i2c_init(void){ int retval; retval = bus_register(&i2c_bus_type); if (retval) return retval; retval = class_register(&i2c_adapter_class); if
Time of Update: 2018-12-04
1. scull的記憶體管理兩個基本函數void *kmalloc(siez_t size,int flags);void kfree(void
Time of Update: 2018-12-04
六:其它的擴充分析完adapter和i2c driver的註冊之後,好像整個架構也差不多了,其它,擴充的東西還有很多.我們舉一個legacy形式的例子,這個例子是在kernel中隨便搜尋出來的:在linux-2.6.26.3/drivers/hwmon/ad7418.c中,初始化函數為:static int __init ad7418_init(void){ return i2c_add_driver(&ad7418_driver);}i2c_driver
Time of Update: 2018-12-04
1.系統的日誌維護 ◆syslog 這個服務程式太重要了,大部分的系統維護都會用到它,也就是網路或系統管理員經常用到的log 檔案。daemon在執行時其實是執行兩個程式:syslogd和klogd,介紹如下,其分別負責不同種類的log,但全部的資訊在系統剛開完機之後,會全部存放在/var/log/message。klogd 先介紹klogd是因為當一開始寫入/var/log/message時,klogd所記錄的資訊會比syslogd