原创 Linux創建進程的流程

Linux系統中提供系統調用fork、vfork、clone的接口用於創建多進程,內核本身創建內核線程的接口是kernel_thread。而它們最終都會調用_do_fork()來創建進程或者內核線程。它們的區別是在於flag的不同,大致的

原创 start_kernel分析總結

從進程的角度分析start_kernel函數,從大的方向可分成三個進程,即:進程0,進程1,進程2。 注:其實在內核中是沒有進程說法的,在Linux內核中用來描述一個進程或者線程,都是描述爲task_struct,即任務。以下方便還是以進

原创 ALSA架構中DMA的使用

ASoC中的Platform驅動分爲兩個部分:snd_soc_platform_driver和snd_soc_dai_driver。而platform_driver則負責管理音頻數據,把音頻數據通過DMA傳送至cpu dai中。註冊聲卡驅

原创 Digital Audio Interface介紹

ASoC當前支持當今在SoC控制器和便攜式音頻編解碼器中發現的三個主要數字音頻接口(DAI),即AC97,I2S和PCM。 AC97接口: AC97是五線接口,通常在許多PC聲卡上都可以找到。 現在,它在許多便攜式設備中也很流行。 該DA

原创 音頻時鐘

音頻時鐘主要由負責編解碼器正常工作的主時鐘和產生正確的音頻播放和捕獲採樣率數字時鐘組成。 主時鐘 每個音頻子系統需要由主時鐘進行驅動(有時稱爲MCLK或SYSCLK)。音頻的主時鐘的來源可以是外部晶振,PLL,CPU時鐘,主時鐘主要負責產

原创 Linux進程調度模塊拆分

學習Linux進程調度子系統,需要合理進程拆分,逐一擊破。關於Linux進程調度子系統可以拆分如下五個大方向: 一、Tasks 1. tasks如何在Linux內核中表示:struct task_struct 2. Linux如何在用戶態

原创 虛擬Codec設計思路

虛擬Codec設計思路就是隻提供SoC到Codec端的PCM接口,Codec端的內部路由不做控制。統一化代碼時需要將平臺端與Codec端代碼分析,設計思路如下所示: 虛擬Codec平臺化  

原创 如何使用宏定義求兩個數的最大值

源代碼如下所示: #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #includ

原创 虛擬化技術架構分類

宿主架構: 直接在操作系統之上安裝和運行虛擬化程序,而這種虛擬化程序的穩定性完全取決於宿主操作系統的穩定行,該虛擬化程序依賴於主機操作系統對設備的支持和物理資源的管理。 宿主架構 裸機架構: 除了宿主架構外,接下來就是裸機架構的虛擬化,

原创 ALSA框架

嵌入式聲卡驅動的架構(ALSA架構)圖: ALSA體系架構 聲卡驅動的PCM數據流向: playback和capture數據流向  

原创 ALSA聲卡註冊流程

嵌入式聲卡驅動主要分爲Platform Driver、Codec Driver、Machine Driver三部分,聲卡驅動的註冊是Machine Driver的註冊進行展開。按照ALSA架構看,聲卡的註冊流程是自底向上進行展開。也就是具

原创 Linux聲卡驅動涉及重要結構體

struct snd_card是在ALSA Core層的核心數據結構,而snd_soc_card是ASoC層的核心數據結構。在嵌入式系統中,聲卡驅動一般只需要關注兩個邏輯設備:PCM設備跟Control設備。PCM設備用於管理音頻數據,而

原创 PCM的open流程

在系統初始化後,關於聲卡驅動的加載流程主要先跑Step 1-->Step 2-->Step 3這個順序進行加載。首先Step 1是聲卡驅動的入口函數,其次Step 3是我們裝載聲卡驅動模塊的入口函數,最後Step 3是用戶空間的應用程序打

原创 Linux內核線程管理

內核線程的調度和管理都是通過kthreadd(pid=2)進行管理的,內核線程kthreadd通過進程0創建,而創建內核線程通過函數kernel_thread進行創建。kthreadd如何管理內核線程和調度如下所示: Linux內核線程

原创 虛擬化技術--01

宿主架構: 直接在操作系統之上安裝和運行虛擬化程序,而這種虛擬化程序的穩定性完全取決於宿主操作系統的穩定行,該虛擬化程序依賴於主機操作系統對設備的支持和物理資源的管理。 宿主架構 裸機架構: 除了宿主架構外,接下來就是裸機架構的虛擬化,