原创 從零開始之驅動發開、linux驅動(四十九、linux下的IIC核心層的接口[3])

I2C核心中的主要函數如下: (1) 增加/刪除i2c_adapter int i2c_add_adapter(struct i2c_adapter *adap); void i2c_del_adapter(struct i2c_ada

原创 從零開始之驅動發開、linux驅動(四十八、linux下的IIC核心層的建立[2])

I2C核心(drivers/i2c/i2c-core.c) 中提供了一組不依賴於硬件平臺的接口函數, 這個文件一般不需要被工程師修改, 但是理解其中的主要函數非常關鍵, 因爲I2C總線驅動和設備驅動之間以I2C核心作爲紐帶。   首先看一

原创 從零開始之驅動發開、linux驅動(四十七、linux下的IIC框架【1】)

I2C總線僅僅使用SCL、 SDA這兩根信號線就實現了設備之間的數據交互, 極大地簡化了對硬件資源和PCB板佈線空間的佔用。 因此, I2C總線非常廣泛地應用在EEPROM、 實時鐘、 小型LCD等設備與CPU的接口中。   如果在裸機情

原创 從零開始之驅動發開、linux驅動(五十七、linux4.19的IIC驅動的編寫和使用1)

第一點,配置內核支持i2c Device Drivers ---> I2C support ---> <*> I2C device interface [*]

原创 從零開始之驅動發開、linux驅動(六十九、內核調試篇--內核卡死分析)

內核卡死有很多種可能, 驅動程序因爲邏輯問題,出現死循環 共享資源出現死鎖 系統跑飛等 一般情況下,系統跑飛內核會打印Oops信息。 有了Oops信息,我們就可以通過上一節的方法來推斷出出錯位置。   而死鎖或者驅動程序死循環並不會打印O

原创 wsl下安裝交叉編譯問題解決

因爲我的交叉編譯工具是32位的,所以win10下的wsl沒法使用 使用如下命令 arm-none-linux-gnueabi-gcc -v 會出現下面的告警 /usr/local/arm/arm-2014.05/bin/arm-no

原创 嵌入式linux單板上開啓telnet功能

  第一步,在文件系統中開啓,開啓這些命令。當然一般是開啓的(busybox-1.28.4) Networking Utilities ---> ...... [*] telnet (8.7 kb)

原创 從零開始之驅動開發、linux驅動(七十一、電容觸摸屏驅動)

一、電容式觸摸屏檢測原理 基本原理是利用充電時間檢測電容大小,從而通過檢測出電容值的變化來獲知觸摸信號。電容屏的最上層是玻璃(不會像電阻屏那樣形變),核心層部分也是由ITO材料構成的,這些導電材料在屏幕裏構成了人眼看不見的靜電網,靜電網由

原创 從零開始之應用發開、linux應用(三、應用調試之打印錯誤)

使用gdb調試,可以發現一些我們理解錯誤的邏輯問題,一般情況下我都是使用gdb進行調試的。 但有時我們的應用程序很大,我們不知道哪裏出的問題,即gdb調試不知道在哪裏打斷點(當然也可以單步或者自己定幾個斷點),這個時候就需要有別的方法來找

原创 從零開始之應用發開、linux應用(二、應用調試之gdb)

Linux中包含一個很強大的調試工具GDB(GNU Debuger),可以用它來調試C和C++程序。   什麼是GDB? GDB是GNU開源組織發佈的一個強大的UNIX下的程序調試工具。與Window下的IDE不同,GDB是純命令行執行的

原创 從零開始之應用發開、linux應用(一、應用調試之strace)

  strace是個功能強大的Linux調試分析診斷工具,可用於跟蹤程序執行時進程系統調用(system call)和所接收的信號,尤其是針對源碼不可讀或源碼無法再編譯的程序。      在Linux系統中,用戶程序運行在一個沙箱(san

原创 從零開始之驅動開發、linux驅動(七十、4.19內核nfs掛載只讀問題的延伸)

之前移植的3.16.57版本的內核,使用2018年7月的busybox自己構建的這個根文件系統。 使用3.16.57版本的內核用nfs掛載,這個根文件系統是一個可讀可寫的內核。 但後面爲了學習設備樹,移植了4.19版本的內核,發現文件系統

原创 從零開始之驅動發開、linux驅動(六十八、內核調試篇--Oops解析)

什麼是Oops? 從語言學的角度說,Oops應該是一個擬聲詞。當出了點小事故,或者做了比較尷尬的事之後,你可以說"Oops",翻譯成中國話就叫做“哎呦”。“哎呦,對不起,對不起,我真不是故意打碎您的杯子的”。看,Oops就是這個意思。 在

原创 從零開始之驅動發開、linux驅動(六十七、內核調試篇--printk使用)

printk的使用我們在內核,驅動調試的時候使用的非常多 比如前面在調試usb驅動的時候 #include <linux/init.h> #include <linux/usb/input.h> #include <linux/hid.

原创 從零開始之驅動發開、linux驅動(六十六、內核調試篇--printk原理)

上一節我們已經看到了console的註冊,prink的基礎就是console,所以本節我們主要看內核中prink的實現。   /** * printk - print a kernel message * @fmt: format