原创 Linux內核頁表

一. Linux地址空間 ARM的32位系統共支持4G的內存空間,其中0-3G爲用戶空間,3G-4G是內核空間, ARM採用2級頁表,32位地址空間ADDRESS分別爲 PGD|PTE|12Bits, 在內核代碼中分別爲PGD

原创 ARMV8 用戶態DMA cache一致性問題和解決

原因: dma和cpu都有操作內存的能力,dma操作內存不通過cpu和cache,即cpu cache感知不到dma對內存的操作 因此cpu和dma合作時,就會存在cpu cache和內存的一致性問題,原因是dma對內存操作無法被ca

原创 ld 和參數說明

本文檔介紹GNU連接器ld的2.14版本. 本文檔在GNU自由文檔許可證下發行.在"GNU自由文檔許可證"一章中有關於本許可證的一份拷貝. 概述 ‘ld’把一定量的目標文件跟檔案文件連接起來,並重定位它們的數據,連接符號引用.一般,在

原创 c++符號表解析

約在20世紀70年代以前,編譯器編譯源代碼產生目標文件時,符號名與相應的變量和函數的名字是一樣的。比如一個彙編源代碼裏面包含了一個函數foo,那麼彙編器將它編譯成目標文件以後,foo在目標文件中的相對應的符號名也是foo。當後來UNI

原创 枚舉變量 enum

不能將非枚舉量賦給枚舉變量,那麼能不能將枚舉量賦給非枚舉變量呢?如:int a=Monday;這是允許的,因爲枚舉量是符號常量,這裏的賦值編譯器會自動把枚舉量轉換爲int類型。 另外枚舉還有一種少見的用法是 enum { one ,t

原创 yocto 默認x86根文件系統 開啓 serial 登陸支持

使用yocto編譯的x86 根文件系統默認是圖形界面。通過修改etc/inittab的啓動級別後,修改默認從字符界面啓動,連接串口,默認沒有shell。 解決方法: 1. 修改啓動參數,添加console=ttyS0,115200 2

原创 阿里linux內核月報201412

Live kernel patching on track for 3.20 運行時間敏感的用戶一直以來都很希望有一種方法可以在不重啓系統的情況下對運行的操作系統內核打補丁。目前有幾個還沒有進入主線內核的實現(比如:kpatch, Kg

原创 阿里linux內核月報201405-06

The initial kGraft submission 長久以來,重啓操作系統來安裝一個內核補丁一直是一個煩人的事情。很多時候,重啓系統的時機會受到其他條件的限制。此外,用戶則更希望能夠在不重啓系統的情況下完成內核補丁的安裝工作。2

原创 linux DO_ONCE、Static Keys、jump label和IPI

本文基於linux4.4 問題的來源: 研究的起始來源與發現linux4.4內核在x86機器上text_poke_bp函數會向每個在線cpu發送IPI,執行do_sync_core動作。 雖然do_sync_core只是在每個cpu上

原创 計算機優化的一些隨想

Wolpert and Macready 在 1997 年在優化領域中提出的 No Free Lunch Theorems(NFL),可以簡單理解爲:針對某一具體域內的所有優化問題 Q,經過 m 步迭代之後達到目標函數給定值的所有可能性的

原创 阿里linux內核月報201503

Virtual filesystem layer changes, past and future LSF/MM 2015峯會上,虛擬文件系統也吸引了足夠的目光。LSF/MM 2015峯會上,虛擬文件系統也吸引了足夠的目光。 首先是一

原创 ELF文件格式簡介

https://blog.csdn.net/gx19862005/article/details/53350032

原创 linux 後臺clocksource_watchdog 線程的啓動條件

如果啓動參數沒有設置tsc=reliable,系統認爲tsc時鐘源需要檢查後能被使用 2.檢查的方法是啓動clocksource_watchdog 加入時鐘源的時候,如果tsc時鐘源不是reliable,則會在執行list_add(

原创 vmlinux 和普通elf文件的差別 linux kernel加載簡述

vmlinux其實也是一個elf格式文件,它和普通elf是有些區別的。 linux下可執行程序格式是elf的。 elf格式的文件中有一個Program Headers,這個數據結構告訴 程序加載器,應該如何把 這個elf文件加載到虛擬地

原创 定位linux 內核oops具體代碼的簡便方法

通常是使用objdump對文件反彙編,然後去查找對應錯誤,下面介紹兩種更簡單的方法: 方法一: 假如我們要查看0xffffffff8124d1f9地址對應的是內核中哪個文件哪一條代碼,可以按照如下方法來做: ~/crosstools/x8