原创 求一個數的臨近的較大的2的整數次冪
偶然看到雲風的http://blog.codingnow.com/2011/12/buddy_memory_allocation.html 代碼,發現了一個比較巧妙的實現。 static inline int is_pow_of_2(
原创 u-boot常用編譯選項
-isystem path 指定系統的頭文件,U-boot指定的是編譯器的頭文件 在host主機運行 arm-linux-gnueabihf-gc
原创 liinux中lds鏈接腳本中定義的變量理解
鏈接腳本中定義的符號(symbol)也可以認爲是全局變量,在C代碼和彙編代碼都可以訪問它。鏈接腳本定義的符號(變量)時代表一個地址。 下面根據u-boot中情形分兩種情況討論: OUTPUT_FORMAT("elf32-littlearm
原创 結合2012.10版本的u-boot分析SD卡驅動(筆記)
xxx_mmc_init流程: |power up sd_card|給卡上電 | \|/ |reset controller/fifo/dma|執行控制器復位/fifo復位 |
原创 3.10內核中使用dtb的ramdisk啓動方法
內核配置如下: 1) General setup-->[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
原创 C語言引用匯編代碼裏的全局標號或變量
在內核的include/linux/linkage.h中定義了: #ifndef ENTRY #define ENTRY(name) \ .globl name; \ ALIGN; \ name: #endif #endif
原创 arm的2級頁表在Linux內核創建過程解析
系統DDR的基地址爲0x0,內存爲1GB,所以TTB的基地址爲0x4000。下面要創建虛擬地址0xfe700000到物理地址0xffff0000之間的映射,映射大小爲64KB,即16頁。由於物理地址不是1MB字節對齊,所以必須創建兩級
原创 最新的linux內核啓動時保留一段連續物理內存方法
MACHINE_START .reserve = xxx_reserve, MACHINE_END static void __init xxx_reserve(void) { memblock_free(phy_address_bas
原创 嵌入式系統如何安裝內核模塊
在內核源碼目錄下輸入make help,這裏就有幫助: 當我們把SD卡的ext3分區通過讀卡器掛載到主機下面,比如/media/xxxxx。 make ARCH=arm CROSS_COMPILE=arm-linux- modules
原创 wpa_supplicant和openssl移植
在ubuntu10.04下移植,下面記錄過程。 版本:wpa_supplicant-2.0.tar.gz openssl-1.0.1e 編譯器:linaro - arm-linux-gcc-4.7.3 備註: 經過測
原创 linux下的二進制工具
hexdump -C -v xxx.bin xxd -g1 xxx.bin 表示以1個字節爲分組,默認是2個字節分組,-g0表示以位的形式分組。 我們可以利用hexdump -C -v /dev/input/eventx
原创 usb
硬件部分: usb 信號: VBUS, GND, D+,D-,ID共5根線。 usb分爲插座和插頭兩種。 圖1 A型插座 圖2 A型插頭 圖3 mini 插頭 圖4 micro 插頭 standard:標準 mini: mic
原创 USB HID設備驅動加載過程
本文以linux-3.12內核來分析usb鍵盤插入系統後系統如何識別usb鍵盤的過程。內核選項配置CONFIG_HID,CONFIG_USB_HID,CONFIG_HID_GENERIC,但是沒有配置CONFIG_USB_KBD,CO
原创 查找一個字符串中最大重複子串(C語言版)
#include <stdio.h> #include <string.h> /* 找出一個字符串最大相同子串,如果有多個重複子串,則要求返回最後一個位置的子串 */ void print_sub(char *p, int len) {
原创 usb
硬件部分: usb 信號: VBUS, GND, D+,D-,ID共5根線。 usb分爲插座和插頭兩種。 圖1 A型插座 圖2 A型插頭 圖3 mini 插頭 圖4 micro 插頭 standard:標準 mini: mic