當前位置:首頁 » 編程軟體 » 交叉編譯alsa

交叉編譯alsa

發布時間: 2023-12-14 09:26:04

1. 學嵌入式linux需要先學什麼

韋東山:6000字長文告訴你如何學習嵌入式linux

鏈接:網頁鏈接

第1章 單片機和Linux的區別

1.1 有哪些產品使用單片機或Linux

所有的電子產品,所用技術都可以認為要麼是單片機,要麼是Linux;GUI方面主要是QT/Android,它們都是運行於Linux之上的。

下面我們用類比和邏輯推導出嵌入式Linux系統的組成,沒錯,「推導」。

從上圖可以知道:

① 組成:

嵌入式Linux系統

= bootloader + linux內核 + 根文件系統(裡面含有APP)。

② bootloader:

它的目的是啟動內核,去哪等讀內核?讀到哪裡?去Flash等外設讀內核,存到內存里去。所以需要有Flash里外設的驅動能力,為了調試方便還會有網路功能。

所以,可以認為 booloader = 裸機集合,它就是一個復雜的單片機程序。

③ Linux內核

Linux內核的最主要目的是去啟動APP,APP保存在哪裡?保存在「根文件系統」里。「根文件系統」又保存在哪裡?在Flash、SD卡等設備里,甚至可能在網路上。所以Linux內核要有這些Flash、SD卡里設備的驅動能力。

不僅如此,Linux內核還有進程調度能力、內存管理等功能。

所以:Linux內核 = 驅動集合 + 進程調度 + 內存管理等。

2.3 要學習bootloader嗎

Bootloader有很多種,常用的叫作u-boot。

在實際工作中,對於u-boot基本上是修修改改,甚至不改。但是u-boot本身是很復雜的,比如為了便於調試,它支持網路功能;有些內核是保存在FAT32分區里,於是它要能解析FAT32分區,讀FAT32分區的文件。

花那麼多精力去學習u-boot,但是工作中基本用不到,這對初學者很不友善。

所以,對於初學者,我建議:理解u-boot的作用、會使用u-boot的命令,這就可以了。

如果你的工作就是修改、完善bootloader,那麼再去研究它吧。

2.4 要學習Linux內核、要學習驅動程序嗎

之前我們說過Linux內核 = 驅動集合 + 進程調度 + 內存管理等,如果要學習Linux內核,從驅動程序入手是一個好辦法。

但是人人都要學習Linux內核、人人都要學習Linux驅動嗎?顯然不是。

作為初學者,懂幾個簡單的驅動程序,有利於工作交流;理解中斷、進程、線程的概念,無論是對驅動開發、應用程序開發,都是很有好處的。

所以對於初學者,建議前期只學習這幾個驅動:LED、按鍵、中斷。

① LED驅動程序:

這是最簡單的驅動程序。

② 按鍵驅動程序:

它也比較簡單,從它引入「中斷」。

③ 中斷:

從「中斷」它可以引入:休眠-喚醒、進程/線程、POLL機制、非同步通知等概念。這些概念無論是對驅動開發,還是對應用開發,都很重要。

所以,對於初學者,我建議必須學習這幾個驅動:LED、按鍵、中斷。

入門之後,如果你想從事內核開發、驅動開發,那麼可以去鑽研幾個驅動程序(輸入系統、I2C匯流排、SPI匯流排等),掌握若干個大型驅動程序後,你對內核的套路就有所了解了,再去研究其他部分(比如進程管理、文件系統)時你會發現套路是如此通用。

攝像頭(VL42)、音效卡ALSA驅動是Linux中比較復雜的2類驅動,它們是很難的,如果工作與此相關再去研究。


2.5,要學習Linux應用程序嗎?先學一些基礎技能

要學,即使以後你只想研究內核,一些基本的應用開發編寫能力也是需要的:

① 基本設備的訪問,比如LCD、輸入設備

② 進程、線程、進程通信、線程同步與互斥

③ 休眠-喚醒、POLL機制、信號

④ 網路編程

①②③部分的知識,跟驅動有密切的關系,它們是相輔相承的。

掌握了基本驅動開發能力、基本應用開發能力之後,在工作中你就可以跟別人友好溝通了,不至於一臉懵逼。


2.6,應用程序是怎麼啟動的?要了解一下根文件系統

你辛辛苦苦寫出了應用程序,怎麼把它放到板子上,讓它開機就自動啟動?

你寫的程序,它依賴於哪些庫,這些庫放到板子上哪個目錄?

怎麼做一個可升級的系統?即使升級中途斷電了,也要保證程序至少還可以運行老的版本?

這些都需要我們了解一下根文件系統。

先了解一下init進程:它要讀取配置文件,根據配置文件啟動各個APP。

了解了init進程,你就了解了根文件系統的組成,就可以隨心所欲裁剪系統,為你的項目製作出最精簡的系統。

第3章 學習方法

3.1,先不要打破砂鍋問到底

嵌入式涉及的東西太多太雜了,如果心裡沒有主線,碰到什麼都要去研究個透徹,最終反而忘記自己要學什麼了。

嵌入式涉及硬體知識、軟體知識,軟體里涉及匯編、ARM架構、C語言、Makefile、Shell;又分為bootloader、內核、驅動、基本的APP、GUI。

比如我們會用到Makefile,了解它的基本規則,會用我們提供的Makefile就可以。

不需要深入研究那些make函數,因為在工作中都有現成的Makefile給你使用,不需要自己去編寫一套Makefile。何必花上好幾天去深入研究它呢?

比如我們會用到bootloader,難道又要花上幾個月來深入研究u-boot嗎?工作中基本不需要改u-boot,會用那幾個命令就可以。

甚至有些學員先去買本shell的書來學習shell命令,何必?我們在視頻中用到什麼命令,你不懂時再去網路一下這些命令就可以了。

不要脫離初學者的主線:應用基礎、驅動基礎。有了這2個基礎後,你想深入研究某部分時,再去花時間吧。

3.2,思路要清晰,不怕抄代碼

視頻里的代碼,請你一定要自己去寫一次、寫多次。為什麼我現在寫驅動那麼熟?我2009年在華清遠見上課時,

每次上課我都要給學生寫一次那些驅動,十幾次下來閉著眼睛都知道內核的套路了。

記不住那些函數?我也記不住,我都是去參考同類的驅動程序,這又不是閉卷考試。

但是要理清楚思路,你寫這個程序要完成什麼功能、怎麼實現這些功能?這個要弄清楚。

有了思路後再寫代碼,不知道怎麼寫?沒關系,看看視頻,看看示例,然後關閉視頻看看能否自己寫出來。

3.3,對自己的方向很了解,我只能帶你到這里了

我的專長是操作系統,是快速地帶領大家掌握一些項目開發的基礎知識。

如果你決定深入研究某方面時,我並不能帶你多久。你要去看源碼,去看這方面的專業書籍。

比如想深入鑽研內核的內存管理時,它有頁表映射(你需要閱讀ARM架構的手冊)、SLAB分配器、vmalloc/malloc實現、mmap實現、缺頁中斷、父進程子進程之間的頁面管理等等,內容非常多。有時候連書籍都沒有,你需要直接啃代碼。

當你想從事某個行業時,就需要深入研究行業相關的知識。

比如CAN匯流排,它可以寫成一本書:CAN協議、CAN報文、Socket CAN、車身網路拓撲結構,CAN應用報文,CAN網路管理報文,CAN診斷報文。

想做物聯網網關,需要深入研究MQTT,MQTT協議相對簡單,但是MQTT英文原版協議有130多頁,中文版有近100頁,是一本小書了。

每個行業都有自己的業務邏輯,在掌握基本的編程能力之一,你需要結合具體的業務去深入學習。

-☆ END ☆-

2. 如何配置編譯在mini2440開發板上運行的linux內核

參考:http://www.it165.net/os/html/201409/9334.html

系統ubuntu12.04(非虛擬機下)
mini2440
CPU型號: S3C2440AL-40
Nanflash型號:K9F1G08
Norflash型號:SST39VF1601
LCD: 統寶 240 x 320
$: 普通賬戶
#:root賬戶
*當shell下輸入路徑時可使用tab鍵自動補全

(一)建立交叉編譯環境

1.將mini2440光碟中的linux文件夾拷貝到 /home/lianghuiyong 並改名為Linux_share
(其中兩個文檔為我後面添加進去的)

2.Ctrl+Alt+T打開shell
3.$ su - root (切換root許可權)
4.# cd /home/lianghuiyong/Linux_share
5.解壓安裝arm-linux-gcc編輯器
# tar xvzf arm-linux-gcc-4.4.3.tar.gz –C / //注意:C後面有個空格
執行該命令,將把 arm-linux-gcc 安裝到/usr/loca/arm/4.4.3 目錄。這句來自mini2440用戶手冊,我發現其實是安裝到 /opt/FriendlyARM/toolchain/4.4.3 目錄

6.# vim /root/.bashrc
7.在最後一行添加:export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin //opt/FriendlyARM/toolschain/4.4.3/bin 為arm-linux-gcc 環境變數
:wq保存退出。
# source ~/.bashrc
8.# sudo gedit /etc/environment
games後面添加標記部分

9.# arm-linux-gcc -v //gcc後面有空格

測試hello.c(這是在安裝了第二部分的linux示常式序才有examples/hello目錄)
# cd /opt/FriendlyARM/mini2440/examples/hello
# arm-linux-gcc -o hello hello.c
# ./hello

(二)安裝源代碼及其他工具
創建工作目錄(以下都為root環境下):
# mkdir -p /opt/FriendlyARM/mini2440

1>>解壓安裝linux內核源代碼
# cd /opt/FriendlyARM/mini2440
# tar xvzf /home/lianghuiyong/Linux_share/linux-2.6.32.2-mini2440-20100106.tar.gz

2>>解壓安裝嵌入式圖形系統qtopia源代碼
# cd /opt/FriendlyARM/mini2440
# tar xvzf /home/lianghuiyong/Linux_share/x86-qtopia.tgz
# tar xvzf /home/lianghuiyong/Linux_share/arm-qtopia.tgz

3>>解壓安裝嵌入式圖形系統 QtE-4.6.1 源代碼
# cd /opt/FriendlyARM/mini2440
# tar xvzf /home/lianghuiyong/Linux_share/arm-qte-4.6.3-20100802.tar.gz

4>>解壓安裝busybox 源代碼
# cd /opt/FriendlyARM/mini2440
# tar xvzf /home/lianghuiyong/Linux_share/busybox-1.13.3-mini2440.tgz

5>>解壓安裝 Linux 示常式序
# cd /opt/FriendlyARM/mini2440
# tar xvzf /home/lianghuiyong/Linux_share/examples-20100108.tgz

6>>解壓安裝 vboot 源代碼
# cd /opt/FriendlyARM/mini2440
# tar xvzf /home/lianghuiyong/Linux_share/vboot-src-20100106.tar.gz

7>>解壓安裝 bootloader 源代碼
# cd /opt/FriendlyARM/mini2440
# tar xvzf /home/lianghuiyong/Linux_share/bootloader.tgz

8>>解壓創建目標文件系統
# cd /opt/FriendlyARM/mini2440
#tar xvzf /home/lianghuiyong/Linux_share/rootfs_qtopia_qt4-20100816.tar.gz

9>>解壓安裝目標文件系統映象製作工具 mkyaffs2image
# cd /opt/FriendlyARM/mini2440
# tar xvzf /home/lianghuiyong/Linux_share/mkyaffs2image.tgz –C /

10>>解壓安裝LogoMaker
# cd /opt/FriendlyARM/mini2440
# tar xvzf /home/lianghuiyong/Linux_share/logomaker.tgz –C /

(三)定製linux內核及製作文件系統

config_mini2440_x35 – 適用於 Sony 3.5」 LCD 的內核配置文件
config_mini2440_t35 – 適用於統寶 3.5」 LCD 的內核配置文件
config_mini2440_l80 – 適用於 Sharp 8」 LCD(或兼容)的內核配置文件
config_mini2440_n35 – 適用於 NEC3.5」 LCD 的內核配置文件
config_mini2440_h43 – 適用於 4.3」 LCD 的內核配置文件
config_mini2440_a70 – 適用於群創 7」 LCD 的內核配置文件
config_mini2440_vga1024x768 – 適用於 VGA 顯示輸出(解析度 1024x768)模塊的內核
配置文件

1.配置預設文件config_t35 (統寶240x320)

# cd /opt/FriendlyARM/mini2440/linux-2.6.32.2
# cp config_mini2440_t35 .config
# make menuconfig
出現界面
不做更改,exit退出。這樣做是為了生成相應配置(統寶240x320)的頭文件。

2.編譯內核

在/opt/FriendlyARM/mini2440/linux-2.6.32.2 目錄下編譯內核
#make zImage
編譯結束後,會在 arch/arm/boot 目錄下生成 linux 內核映象文件:zImage(zImage 可下載到開發板測試)

3.定製linux內核(根據用戶手冊來走一遍)

# cd /opt/FriendlyARM/mini2440/linux-2.6.32.2
# make menuconfig
出現配置選項:

3.1配置cpu
主菜單-->System --> Type S3C2400 Machines --> FriendlyARM Mini2440 development board
3.2配置lcd驅動
主菜單-->Device Drivers-->Graphics support-->Support for frame buffer devices-->Backlight-->LCD select-->3.5 inch 240x320 Toppoly LCD

3.3配置觸摸屏
主菜單-->Device Drivers-->Input device support-->Touchscreens-->Samsung s3c24410 touchscreen input driver

3.4配置usb滑鼠和鍵盤
主菜單-->Device Drivers-->hid devices-->USB Human interface Device

3.5 配置優盤
主菜單-->Device Drivers-->SCSI device support--> SCSI disk

3.6配置萬能驅動USB攝像頭
主菜單-->Device Drivers-->Multimedia devices-->Video capture adapters -->V4L USB devices-->GSPCA based webcams-->ALi USB m 5602 Camera Driver

3.7 配置CMOS攝像頭驅動
主菜單-->Device Drivers-->Multimedia devices-->Video capture adapters-->OV9650 on the s3c2440 driver

3.8配置網卡驅動
主菜單-->Netwoking support-->Networking options -->選擇Unix和TCP/IP

主菜單-->Device Drivers-->Network device support-->Ethernet (10 or 100Mbit)-->
選擇 <*> Generic Media Independent Interface device support
<*> DM9000 support

3.9 配置USB無線網卡驅動
主菜單-->Netwoking support-->wireless-->IEEE 802.11

主菜單-->Device Drivers-->Netwoking device support-->wireless LAN-->Wireless LAN(IEEE 802.11)-->Ralink driver support-->

3.10 配置音頻驅動
主菜單-->Device Drivers-->Sound card supprt-->OSS Mixer API -->ALSA for Soc audio support-->SoC Audio for the samsung S3Cxxxx Chips

3.11 配置SD/MMC卡驅動
主菜單-->Device Drivers-->MMC/SD/SDIO card-->samsung S3C SD/MMC card

3.12 配置看門狗驅動支持
主菜單-->Device Drivers-->Watchdog Timer-->s3c2440 Watchdog

3.13 配置LED驅動
主菜單-->Device Drivers-->Character devices-->LED support for Mini2440

3.14 配置按鍵驅動
主菜單-->Device Drivers-->Character devices-->Buttons driver

3.15 配置PWM控制蜂鳴器驅動
主菜單-->Device Drivers-->Character devices-->buzzer driver for

3.16 配置AD轉換驅動
主菜單-->Device Drivers-->Character devices-->ADC driver for

3.17 配置串口驅動
主菜單-->Device Drivers-->Character devices-->Serial drivers-->samsung S3C2440/S3C2442

3.18 如何配置RTC實時時鍾驅動
主菜單-->Device Drivers-->Real Time Clock-->samsung S3C series SoC RTC

3.19 配置I2C-EEPROM驅動支持
主菜單-->Device Drivers-->I2C support -->I2C Hardware Bus support-->S3C2410 I2C Driver

3.20 配置yaff2s文件系統的支持
主菜單-->Device Drivers-->MTD-->NAND Device Support -->NAND FLASH Support
主菜單-->File systems-->Miscellaneous filesystems -->YAFFS2 file system support

3.21 配置EXT2/VFAT/ NFS等文件系統
主菜單-->File systems-->Network File Systems -->root file system on NFS

為了支持FAT32 文件系統.
主菜單-->File systems-->DOS/FAT/NT Filesystems -->VFAT (windows-95) fs support

關於mini2440 linux內核裁剪到此為止,退出後有一個是否保存提示,選擇保存!

3.22 製作Linux logo

本來想使用Logomaker,結果生成的圖片都是無數據的,這可能和系統內一些參數有關
使用命令方式製作logo:
在圖片(open_show.png)目錄下
# pngtopnm open_show.png > temp.ppm
# ppmquant 224 temp.ppm >temp2.ppm
# pnmnoraw temp2.ppm > logo.ppm
將目錄下生成的logo.ppm改成linux_logo_clut224.ppm,替代linux2.6.32.2/drivers/video/logo 目錄下的同名文件

熱點內容
數列的c語言編程 發布:2024-11-17 10:33:50 瀏覽:136
伺服器換ip多久生效 發布:2024-11-17 10:33:49 瀏覽:387
ipad導出緩存b站視頻 發布:2024-11-17 10:29:33 瀏覽:356
mc手機版伺服器搭建 發布:2024-11-17 10:23:38 瀏覽:55
豐田普拉vxl什麼配置 發布:2024-11-17 10:23:37 瀏覽:80
clindexphp 發布:2024-11-17 10:22:12 瀏覽:48
在線編輯器php 發布:2024-11-17 10:04:44 瀏覽:257
神經網路演算法C 發布:2024-11-17 10:02:25 瀏覽:208
我的世界如何開伺服器飛天 發布:2024-11-17 09:58:34 瀏覽:639
全志源碼包 發布:2024-11-17 09:56:18 瀏覽:375