原创 Binder系列()——addService——代碼分析

1 概述 addService的過程涉及三個模塊: Service,service通過調用service manager的addService接口將自己註冊到SM,本質上是client; SM,接收service的註冊請求,本質

原创 start_kernel----lcokdep_init

void lockdep_init(void) { int i; /* * Some architectures have their own start_kernel() * code wh

原创 內核panic後使用GDB調試

內核運行時若出現panic,可以根據EIT的值用GDB來定位出錯代碼: 例如我的出錯代碼的EIT的值爲0x80cf7c00+0x6f,可以在GDB下用b或l方式來定位代碼。 yin123@yin:~/work/XXXXX$ gd

原创 從cgroup_init_early函數學習cgroup——框架

一些概念的理解 cgroup cgourp是一種機制 作用:集成各個進程,對進程分組實現進程組,分配或限制進程組使用的資源(這部分主要有個各個subsystem完成)。 另一個角度,在研究代碼的時候,我們更願意將cgrou

原创 uboot源碼分析——啓動linux內核

如果板子啓動以後不按任何鍵,將會默認啓動Linux內核。 我們回到/common/main.c中,首先 s = getenv ("bootcmd"); 然後 run_command (s, 0); bootcmd是一個環境變量,它的值對

原创 start_kernel——boot_cpu_init及PER_CPU

init/main.c /* * Activate the first processor. */ static void __init boot_cpu_init(void) { int cpu = smp_pr

原创 uboot——start_armboot——init_sequence——board_init

board_init函數的作用: 1.對時鐘進行初始化 2.對GPIO進行初始化 3.設置arch number和boot params的地址 4.使能數據緩存和指令緩存 代碼的位置: kangear-u-boot-2009.11\bo

原创 start_kernel——page_address_init

mm/highmem.c void __init page_address_init(void) { int i; for (i = 0; i < ARRAY_SIZE(page_address_htable);

原创 將安卓驅動編譯成moudle開機後自動啓動

假設我們寫好了驅動程序:xxx.c,並且可以正常運行(驅動的init match probe等等都OK) 先看一下將驅動編譯進內核的情況,主要關注以下幾個文件: 驅動文件夾下的Makefile裏有一句: obj-$(CONFI

原创 __init屬性的函數

內核中有衆多__init屬性的函數,這些函數被用作初始化。 比如: /******************************************************* Function: Driver In

原创 CPU動態調頻(linux 3.14.0)一

最近做了一個關於CPU動態調頻的project,邊工作邊學習,在此記錄一下。 code版本:3.14.0(在linxu目錄頂層Makefile中可看到版本號) 設備:基於安卓4.4原生系統的某廠商的手機(以下用XXX代表設備)

原创 修改android usb的VID PID

VID: Vendor ID PID: Product ID 查看VID和PID: device鏈接Ubuntu,終端下輸入lsusb yin123@yin:~$ lsusb Bus 001 Device 005: ID

原创 內核讀寫文件

最近在安卓下實現一個new feature的時候,需要在驅動中讀取sysfs中的一個文件的數據,經過計算後保存到另一個文件中。 在kernel中讀寫文件和在userspace下讀取文件需要調用不同的interface。 全局變

原创 start_kernel——boot_init_stack_canary

/* * Initialize the stackprotector canary value. * * NOTE: this must only be called from functions that never re

原创 從cgroup_init_early函數學習cgroup——初始化代碼

前面分析了cgroup機制的框架及數據結構之間的關係,現在看代碼就比較見簡單了。 代碼部分 在init/main.c的start_kernel函數中會調用cgroup_init_early函數進行cgroup的初始化。其實對c