原创 Linux Kernel Device Tree 配置框架 原

    背景:基於arm平臺的soc種類繁多,硬件資源和配置各不相同。這些平臺硬件相關的信息在設備樹出現之前,是在kernel/arch/arm/plat-xxx目錄和kernel/arch/arm/mach-xxx目錄下硬編碼的。在ker

原创 ldconfig 原

    ldconfig是linux提供的動態庫配置工具,主要用來完成兩個工作:     (1)配置動態庫的搜索路徑。     (2)加載動態庫到系統緩存。     我們知道,Linux的共享庫可以在進程之間共享,因此係統啓動時,會預先根據

原创 C++11 智能指針 原

    C++11提供了三個智能指針,std::shared_ptr,std::unique_ptr,std::weak_ptr。最常用的是shared_ptr和unique_ptr。     (1)std::shared_ptr     

原创 C++ std::function 和 std::bind 原

    C++11提供了std::function和std::bind兩個工具,用於引用可調用對象。這些可調用對象包括 普通函數,Lambda表達式,類的靜態成員函數,非靜態成員函數以及仿函數等。引用可調用對象,可以用於回調,抽象,以及延遲

原创 動態庫和靜態庫及混合鏈接 原

    Linux的動態庫和靜態庫的概念:     (1)靜態庫:Linux靜態庫就是一些 .a 文件。本質上就是一些二進制文件的打包,一個靜態庫可以是由 0 ~ 多個 .o 文件生成。靜態庫在鏈接到可執行文件時被拷貝到可執行文件中,因此可

原创 GCC/G++ 符號導出控制 原

        我們知道,GCC/G++編譯出來的二進制文件默認情況下會導出所有的符號表。在實際應用過程中,我們也許出於安全或者其他的原因,不想導出內部所有的符號表,只導出必要的接口給用戶使用。此時我們可以利用 GCC/G++ 的 -fvi

原创 Linux Kernel GPIO框架gpiolib 原

    一,GPIO介紹     GPIO(Generic Purpose Input/Output port),即通用輸入輸出端口。gpio提供了通用的引腳輸入輸出和特定的功能,可以實現引腳級別的輸入輸出控制,多個引腳組合在一起,也可以實

原创 gcc/g++編譯選項: -fPIC 原

    在理解PIC概念之前,先了解一下動態鏈接庫的載入時重定位概念。     載入時重定位:         我們知道,Linux的可執行文件一般是elf格式的,在這個可執行文件的頭部包含了很多重要的信息:如文件格式,加載地址,符號表等。

原创 GCC/G++選項 -Wl,--rpath= 原

    我們知道,GCC/G++提供了-L選項用於鏈接時指定要鏈接的庫的路徑,但是這個選項只限於編譯時,在運行時,可執行文件並未記住鏈接庫的路徑,因此在程序初始化的時候,動態加載程序會報告找不到動態庫錯誤。     示例代碼如下:    

原创 GCC/G++選項 -Wl,-Bstatic和-Wl,-Bdynamic 原

    默認情況下,GCC/G++鏈接時優先鏈接動態庫,如果沒有動態庫,則鏈接相應的靜態庫。同時,GCC/G++也提供了鏈接選項 -Wl,-Bstatic 和 -Wl,-Bdynamic 供用戶指定鏈接動態庫或者靜態庫。     -Wl,-

原创 C++11 NULL和nullptr 原

    衆所周知,C語言使用NULL常量來表示空指針,爲什麼C++11還要增加新的nullptr來表示空指針呢?     1,我們首先查看NULL的定義: #if defined (_STDDEF_H) || defined (__need

原创 GCC/G++選項 -Wl,--soname,xxx 原

    在類Unix系統中,一個動態庫在其數據段提供了一個 SONAME 字段,用於指定該動態庫的實際鏈接名稱。該字段在編譯動態庫時通過-Wl,--soname,xxx 選項指定,其中xxx就是實際鏈接名稱,該實際鏈接名稱往往同動態庫文件名

原创 C++ 鎖 原

    C++提供了兩種常用的鎖,std::lock_guard<Lockable &T>和std::unique_lock<Lockable &T>。通常使用場景下,這兩個鎖用法一致。即,在構造鎖對象時上鎖,在析構鎖對象時解鎖。使用戶從上

原创 C++ wait/notify機制 原

    1,考慮如下Reader/Writer情景:         有一個共享FIFO,寫線程往FIFO裏面寫數據,讀線程從FIFO裏面讀取數據。         站在讀者的角度,如果FIFO爲空,讀者有兩種選擇:一種是輪詢FIFO,直到

原创 GCC/G++選項 -Wl,--as-needed 原

    GCC/G++提供了 -Wl,--as-needed 和 -Wl,--no-as-needed 兩個選項,這兩個選項一個是開啓特性,一個是取消該特性。     在生成可執行文件的時候,通過 -lxxx 選項指定需要鏈接的庫文件。以動