360doc--wanwanstudy的文章
http://www.ahfyzs.com/rssperson/8555864.aspx
360doc (http://www.ahfyzs.com)
zh-cn
360doc--個人圖書館
-
Linux操作系統(tǒng)的內(nèi)存使用方法詳細解析 .
http://www.ahfyzs.com/content/12/0308/10/8555864_192680804.shtml
2012/3/8 10:58:50
glibc內(nèi)存管理器。glibc每次通過系統(tǒng)調(diào)用的方式申請一大塊內(nèi)存(虛擬內(nèi)存),當進程申請內(nèi)存時,glibc就從自己獲得的內(nèi)存中取出一塊給進程。glibc對于heap內(nèi)存申請大于128k的內(nèi)存申請,glibc采用mmap的方式向內(nèi)核申請內(nèi)存,這不能保證內(nèi)存地址向上增長;針對小塊內(nèi)存的申請,在程序啟動之后,進程會獲得一個heap底端的地址,進程每次進行內(nèi)存申請時,glibc會將堆頂向上增長來擴展內(nèi)存空間,也就是我們所說的堆地址向上增長。
-
關(guān)于Linux內(nèi)存管理的一些資料 .
http://www.ahfyzs.com/content/12/0308/10/8555864_192680206.shtml
2012/3/8 10:57:08
struct page * alloc_page(unsigned int gfp_mask)——分配一頁物理內(nèi)存并返回該頁物理內(nèi)存的page結(jié)構(gòu)指針。通過查看源代碼我們可以知道,mem_map是類型為struct page的數(shù)組,而Linux內(nèi)核正是利用struct page結(jié)構(gòu)體來描述每個物理內(nèi)存頁的,在系統(tǒng)啟動時,內(nèi)核就會為整個系統(tǒng)的內(nèi)存建立好一個全局的頁描述數(shù)組mem_map,在以后的運行過程中,Linux內(nèi)核最終就是根據(jù)這個全局內(nèi)存描述數(shù)組來控制對物理內(nèi)存的分配、回收等操作的。
-
linux驅(qū)動開發(fā)常用函數(shù)及函數(shù) .
http://www.ahfyzs.com/content/12/0308/10/8555864_192679510.shtml
2012/3/8 10:55:03
linux驅(qū)動開發(fā)常用函數(shù)及函數(shù) .#define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name)) #define check_mem_region(start,n) __check_region(&iomem_resource, (start), (n)) #define release_mem_region(start,n) __release_region(&iomem_resource, (start), (n))其中,register_chrdev_region()是為提前知道 設(shè)備的主次設(shè)備號的設(shè)備分配設(shè)備編號。
-
module_param、 MODULE_PARM_DESC 、EXPORT_SYMBOL .
http://www.ahfyzs.com/content/12/0308/10/8555864_192679071.shtml
2012/3/8 10:53:51
module_param、 MODULE_PARM_DESC 、EXPORT_SYMBOL .在用戶態(tài)下編程可以通過main()的來傳遞命令行參數(shù),而編寫一個內(nèi)核模塊則通過module_param ()module_param宏是Linux 2.6內(nèi)核中新增的,該宏被定義在include/linux/moduleparam.h文件中,具體定義如下:#define module_param(name, type, perm)module_param_named(name, name, type, perm)module_param(int_var,int,0644);module_param_array(int_array,int,&narr,0644);
-
Android源碼編譯后
http://www.ahfyzs.com/content/12/0307/10/8555864_192407759.shtml
2012/3/7 10:37:55
Android源碼編譯后在out/target/product/generic下生成的三個鏡像文件:ramdisk.img,system.img,userdata.img以及它們對應(yīng)的目錄樹root,system,data。ramdisk.img是根文件系統(tǒng),system.img包括了主要的包、庫等文件,userdata.img包括了一些用戶數(shù)據(jù),android加載這3個映像文件后,會把 system和 userdata分別加載到 ramdisk文件系統(tǒng)中的system和 data目錄下。# mv ramdisk.img ramdisk.img.gz.system目錄樹 >>system.img.
-
Android編譯過程總結(jié)
http://www.ahfyzs.com/content/12/0222/16/8765846_188673408.shtml
2012/3/7 10:07:01
Android編譯過程總結(jié)編譯環(huán)境:ubuntu10.04(或者更高)(windows平臺目前不被支持)以img結(jié)尾的文件是目標映像文件,其中ramdisk.img是作為內(nèi)存盤的根文件系統(tǒng)映像,system.img是主要文件系統(tǒng)的映像,userdata.img是數(shù)據(jù)內(nèi)容映像。Android進行編譯的時候會通過下面的函數(shù)來遍歷所有子目錄中的Android.mk,一旦找到就不會再往層子目錄繼續(xù)尋找(所有你的模塊定義的頂層Android.mk必須包含自己定義的子目錄中的Android.mk)。
-
Android 的main.mk完整分析
http://www.ahfyzs.com/content/11/1101/17/474846_160867511.shtml
2012/3/7 10:06:29
# apns-conf_sdk.xml如:$ANDROID_SRC_HOME/development/data/etc/apns-conf_sdk.xml.CUSTOM_MODULES := $(sort $(call get-tagged-modules,$(ALL_MODULE_TAGS),))#(34)模塊設(shè)定:引擎類模塊eng_MODULES,應(yīng)用類模塊user_MODULES,測試模塊test_MODULES,調(diào)試模塊debug_MOUDLE.# 獲取關(guān)系如下:tags_to_install <- user_variant <- TARGET_BUILD_VARIANT,TARGET_BUILD_VARIANT在buildspec.mk設(shè)定。sdk: $(ALL_SDK_TARGETS)
-
Android 系統(tǒng)編譯
http://www.ahfyzs.com/content/11/0228/16/474846_96909691.shtml
2012/3/7 9:42:32
然后讀取product的設(shè)置(41行),具體實現(xiàn)在build/core/product_config.mk中,進而進入product.mk,從build/target/product/AndroidProducts.mk中讀出PRODUCT_MAKEFILES,這些makefile各自獨立定義product,而我們的產(chǎn)品mobot也應(yīng)添加一個makefile文件mobot.mk。main.mk第446行,這里會去讀取所有的Android.mk文件:回到main.mk,最終將遍歷查找到的所有子目錄下的Android.mk的路徑保存到subdir_makefiles變量里(main.mk里的470行):
-
AndroidMakefile中是如何識別TARGET_PRODUCT的
http://www.ahfyzs.com/content/10/0221/10/155970_16313053.shtml
2012/3/7 9:39:43
-
Micron sensor 驅(qū)動與調(diào)試小結(jié)
http://www.ahfyzs.com/content/12/0306/17/8555864_192263561.shtml
2012/3/6 17:54:44
Micron sensor 驅(qū)動與調(diào)試小結(jié)驅(qū)動篇:1、 Micron sensor ISP的原理圖2、 sensor 的原理框架3、Sensor 的初始化步驟4、Preview時候的sensor設(shè)置5、Capture時候的sensor設(shè)置6、工頻干擾的調(diào)試7、亮度以及夜景模式調(diào)試篇:1、 清晰度的測試2、 灰階重現(xiàn)3、 畫面的均勻性以及暗腳補償4、 畸變5、 白平衡的調(diào)試前言Micron sensor 是我們公司所用最多的圖像傳感器,也是目前市場上評價很高的主流sensor產(chǎn)品。
-
字符設(shè)備中 重要的數(shù)據(jù)結(jié)構(gòu)
http://www.ahfyzs.com/content/12/0228/16/8555864_190314851.shtml
2012/2/28 16:40:10
字符設(shè)備中 重要的數(shù)據(jù)結(jié)構(gòu)大部分字符驅(qū)動設(shè)計三個重要的數(shù)據(jù)結(jié)構(gòu)<linux/fs.h>struct file_operationsstruct filestruct inode 一、文件操作 在之前的一篇文章中已經(jīng)有介紹了如何去生情字符設(shè)備設(shè)備號,但是沒有做任何的工作,也就只能寫一個不能工作的字符設(shè)備;
-
在kernel中如何sleep .
http://www.ahfyzs.com/content/12/0228/16/8555864_190313395.shtml
2012/2/28 16:35:56
在kernel中如何sleep .1. udelay (mdelay調(diào)用udelay實現(xiàn))udelay應(yīng)該是沒有出讓CPU的強制等待(忙等,占用CPU),和應(yīng)用層的sleep還是有區(qū)別的。udelay適合于編寫硬件I/O時的短時間延遲,一般是微秒級才用。如果延遲需要較長(ms以上),最好還是發(fā)出schedule(), 出讓CPU比較好。2.sleep_on(), interruptible_sleep_on();sleep_on_timeout(), interruptible_sleep_on_timeout();
-
Input Core和evdev基本知識 - Kernel3.0.8 .
http://www.ahfyzs.com/content/12/0228/16/8555864_190312087.shtml
2012/2/28 16:32:15
input_dev如何與evdev_handler關(guān)聯(lián)起來的呢?a)在input_register_handler中,把evdev_handler增加到input_handler_list中。b)在input_register_device中,通過input_attach_handler(dev, handler),尋找input_handler_list中哪一個input_handler與需要注冊的設(shè)備相匹配,找到匹配的,則調(diào)用此input_handler的connect把input_handler與注冊的input_device關(guān)聯(lián)起來,這樣新注冊的input_device就有對應(yīng)的處理方法了。
-
Android 4.0 事件輸入(Event Input)系統(tǒng) .
http://www.ahfyzs.com/content/12/0228/15/8555864_190296127.shtml
2012/2/28 15:47:22
Android 4.0 事件輸入(Event Input)系統(tǒng) .1. TouchScreen功能在Android4.0下不工作。記錄touch, stylus and tool buttons狀態(tài),記錄rawEvent->type為EV_KEY,且rawEvent->scanCode為BTN_TOUCH、BTN_STYLUS、BTN_STYLUS2、BTN_TOOL_FINGER、BTN_TOOL_PEN、BTN_TOOL_RUBBER、BTN_TOOL_BRUSH、BTN_TOOL_PENCIL、BTN_TOOL_AIRBRUSH、BTN_TOOL_MOUSE、BTN_TOOL_LENS、BTN_TOOL_DOUBLETAP、BTN_TOOL_TRIPLETAP、BTN_TOOL_QUADTAP的事件。
-
Linux設(shè)備驅(qū)動編程之阻塞與非阻塞
http://www.ahfyzs.com/content/12/0228/15/8555864_190282274.shtml
2012/2/28 15:05:03
read: globalvar_read, write: globalvar_write,};ret = register_chrdev(MAJOR_NUM, "globalvar", &globalvar_fops);static ssize_t globalvar_read(struct file *filp, char *buf, size_t len, loff_t *off){編寫兩個用戶態(tài)的程序來測試,第一個用于阻塞地讀/dev/globalvar,另一個用于寫/dev/globalvar。//程序?qū)⒆枞诖苏Z句,除非有針對globalvar的輸入 printf("The globalvar is %d\n", num);
-
linux 內(nèi)核同步機制-自旋鎖與信號量及其區(qū)別
http://www.ahfyzs.com/content/12/0222/15/8555864_188631419.shtml
2012/2/22 15:01:11
linux 內(nèi)核同步機制-自旋鎖與信號量及其區(qū)別。伴隨著從非搶占內(nèi)核到搶占內(nèi)核的過度。自旋鎖最多只能被一個內(nèi)核任務(wù)持有,如果一個內(nèi)核任務(wù)試圖請求一個已被爭用(已經(jīng)被持有)的自旋鎖,那么這個任務(wù)就會一直進行忙循環(huán)——旋轉(zhuǎn)——等待鎖重新可用。信號量基本使用形式為:static DECLARE_MUTEX(mr_sem);//聲明互斥信號量if(down_interruptible(&mr_sem))//可被中斷的睡眠,當信號來到,睡眠的任務(wù)被喚醒 //臨界區(qū)up(&mr_sem);
-
自己動手實現(xiàn)自旋鎖(spinlock)
http://www.ahfyzs.com/content/12/0222/14/8555864_188629480.shtml
2012/2/22 14:54:59
static void lock_mcs(mcs_lock *m, mcs_lock_t *me){static void unlock_mcs(mcs_lock *m, mcs_lock_t *me){if (tail->next == &me) { /* Fix their next pointer */ tail->next = NULL;} tail = tail->next;/* Try to convert to a single-waiter lock */ if (cmpxchg(l, tail, LLOCK_FLAG) == tail) { /* Unlock */ tail->spin = 1;/* Bit-lock for editing the wait block */#define SLOCK_LOCK 1#define SLOCK_LOCK_BIT 0.
-
自旋鎖spinlock剖析與改進
http://www.ahfyzs.com/content/12/0222/14/8555864_188627916.shtml
2012/2/22 14:50:19
細心的同學(xué)可能會發(fā)現(xiàn)有一個拐點:就是當臨界區(qū)的長度為 1+50*6 的時候,也就是臨界區(qū)有300行代碼的時候,新算法鎖總線次數(shù)要比老算法多,而且執(zhí)行時間也長一些,這就牽扯到新算法的一個缺點:在某些情況下,當鎖可用,需要去競爭鎖的時候,由于線程還在pause中,只有等pause結(jié)束才能去競爭,而pause結(jié)束時,鎖很可能不可用(被其他線程獲取),根據(jù)新算法,加鎖失敗線程又要多pause一次,導(dǎo)致整體的鎖總線次數(shù)和執(zhí)行時間增加。
-
Linux設(shè)備驅(qū)動程序?qū)W習(xí)(2)-調(diào)試技術(shù)
http://www.ahfyzs.com/content/12/0221/10/8555864_188278091.shtml
2012/2/21 10:53:26
[Tekkaman2440@SBC2440V4]#cd /tmp/[Tekkaman2440@SBC2440V4]#./setlevel 1[Tekkaman2440@SBC2440V4]#cd /lib/modules/[Tekkaman2440@SBC2440V4]#insmod hello.ko[Tekkaman2440@SBC2440V4]#rmmod hello[Tekkaman2440@SBC2440V4]#cd /tmp/[Tekkaman2440@SBC2440V4]#./setlevel 7[Tekkaman2440@SBC2440V4]#cd /lib/modules/[Tekkaman2440@SBC2440V4]#insmod hello.koHello, Tekkaman Ninja !
-
調(diào)試技術(shù)
http://www.ahfyzs.com/content/12/0221/09/8555864_188254053.shtml
2012/2/21 9:32:49
這個管道將完整的系統(tǒng)表與/proc/ksyms中的公開內(nèi)核符號混合在一起,后者除了內(nèi)核符號外,還包括了當前內(nèi)核里的模塊符號。利用gdb,你可以通過標準gdb命令查看內(nèi)核標量。當你用-g選項編譯內(nèi)核并且用vmlinux和/proc/kcore一起使用調(diào)試器,gdb可以返回很多有關(guān)內(nèi)核內(nèi)部結(jié)構(gòu)的信息。如你所見,當你的目的是查看內(nèi)核的運行情況時,gdb是一個非常有用的工具,但它缺少某些功能,最重要的一些功能就是修改內(nèi)核項和訪問模塊的功能。