原创 ioctl()分析——從用戶空間到設備驅動

  一個字符設備驅動通常會實現常規的打開、關閉、讀、寫等功能,但在一些細分的情境下,如果需要擴展新的功能,通常以增設ioctl()命令的方式實現,其作用類似於“拾遺補漏”。在文件I/O中,ioctl扮演着重要角色,本文將以驅動開發爲側重點

原创 Android ueventd淺析

platform   mstar828   android 5.0.1 在linux2.6之後,udev取代了devfs,但是在android中卻沒有udev或者mdev1,而是由ueventd進程實現了類似功能(管理設備

原创 device_create()、device_register()、deivce_add()區別

本文基於linux 3.10.40,其他版本僅供參考 在字符設備驅動開發的入門教程中,最常見的就是用device_create()函數來創建設備節點了,但是在之後閱讀內核源碼的過程中卻很少見device_create()的蹤影了,取而

原创 UEFI安裝Win10/Ubuntu16.04雙系統記錄

本文基於以下硬件環境:   主板:華碩ROG B250G   硬盤:浦科特M8PEG 256g(NVME M.2) 1. 操作系統相關科普 爲安裝雙系統,我在網上查了許多資料,一些名詞似曾相識卻又不解其意,特在此總結下:

原创 git使用簡要筆記

1. 使用ssh協議連接github 生成ssh公鑰 $ ssh-keygen 生成的公鑰文件爲: ~/.ssh/id_rsa.pub 在github中添加公鑰 進入github網站-》點擊Settings-》點擊SSH and

原创 Linux內核錯誤碼與錯誤指針

內核錯誤碼 在調用內核api發生異常時通常會返回一個負數值,不同的出錯情況,負數值也不同,這些數值就是內核中預定義的錯誤碼(errno),瞭解這些錯誤碼的含義可以讓我們推測出錯的原因,從而提高開發效率。 errno-base.h中定義了

原创 Linux下使用腳本批量更改文件名

一個簡單的腳本,批量更改文件名a爲b find ./ -name "a" -print | while read name do echo $name rename 's/a/b/' $

原创 input子系統事件處理層(evdev)的環形緩衝區

在事件處理層(evdev.c)中結構體evdev_client定義了一個環形緩衝區(circular buffer),其原理是用數組的方式實現了一個先進先出的循環隊列(circular queue),用以緩存內核驅動上報給用戶層的inpu

原创 VirtualBox報錯“kernel driver not installed(rc=-1908)”

軟件環境:   Ubuntu16.04   VirtualBox5.1.34 安裝VirtualBox在打開虛擬機時出現如下錯誤提示: 先按照提示用root權限執行modprobe vboxdrv重新加載模塊,卻又

原创 內核驅動上報EV_LED事件失敗原因分析

之前在寫驅動時使用如下方式上報一次EV_LED類型事件,使用getevent命令測試卻一直接收不到事件。 input_event(input_dev, EV_LED, LED_MISC, 1); input_sync(input_dev)

原创 shell命令:暫停進程執行

掛起進程並放入後臺 $ ctrl+z 查看後臺進程 $ jobs 使第N個任務在後臺運行(N爲jobs顯示的進程編號,如bg、fg命令不帶參數%N則默認對最後一個進程操作) $ bg %N 使第N個任務在前臺運行 $ fg

原创 Ubuntu16.04卸載Lantern後無法上網解決辦法

卸載Lantern後無法上網,原因是系統代理已經被更改了,此時打開Settings-》Network,選擇Network proxy,改爲None即可。

原创 Android添加新鍵值

platform   mstar828   Android 5.0.1 添加按鍵F13(內核中已經定義鍵值爲183),在android上層自定義鍵值映射600,流程如下: frameworks/base/data/key

原创 Android終端命令:使用mount命令以讀寫方式重新掛載/system分區

執行mount命令得到/system分區詳細信息: $ mount /dev/block/platform/mstar_mci.0/by-name/system /system ext4 ro,relatime,data=ordered

原创 Android make清除命令

本文基於Android5.1.1,其他版本僅供參考 1. make clean 僞目標clean在build/core/main.mk中定義如下: .PHONY: clean clean: @rm -rf $(OUT