yaffs源碼
㈠ 如何製作Ext4文件系統鏡像
編譯Android源碼最後是使用make_ext4生成 Ext4鏡像+簽名(更新:合理使用make_ext4參數是不會導致添加簽名的),如果需要純Ext4鏡像,那麼需要再去掉簽名,使用simg2img。這個兩個工具都是在編譯Android源碼時編譯出來的,如果沒有Android源碼編譯環境,當然也可以使用Ubuntu社區已經整理好的工具集android-tools-fsutils,該工具集文件列表如下:(來自android-tools-fsutils/filelist)
/usr/bin/ext2simg
/usr/bin/ext4fixup
/usr/bin/img2simg
/usr/bin/make_ext4fs
/usr/bin/mkuserimg
/usr/bin/simg2img
/usr/bin/simg2simg
/usr/bin/simg_mp
/usr/bin/test_ext4fixup
工具集安裝方法:
sudo apt-get install android-tools-fsutils
1
1
製作Ext4文件系統鏡像:
# 創建測試目錄
mkdir /tmp/ext4 && cd /tmp/ext4 &&
mkdir test test_mount &&
echo "Hello Ext4" > test/HelloExt4.txt &&
# 生成名為test.ext4的Ext4鏡像
make_ext4fs -l 512M test.ext4 test &&
# 掛載test.ext4到test_mount測試
mount -t ext4 -o loop test.ext4 test_mount &&
ls test_mount || echo "Error!"
一、在(yourAndroid code path)/out/ 目錄里查找這個工具
unyaffs: 用於解壓system.img
mkyaffs2image: 用於打包system.img
呵呵,find 命令肯定會吧?find out/ -name mkyaffs2image
找到了後,記住這個目錄. 我的是(codePATH)/out/host/linux-x86/bin/
1.在任意文件夾下面建立一個system文件夾,我的是在home/changjiang/下面建的,這個是用來存放你解壓system.img出來的文件,然後將找到的兩個工具 unyaffs、mkyaffs2image拷貝到/changjiang/home/system
2.將編譯出來的system.img或者下載的system.img復制到system文件夾中。
3.在終端中輸入如下命令操作(/home/changjiang/替換成自己電腦中的路徑,你的不是我的)
cd /home/changjiang/system
./unyaffs /home/changjiang/system/system.img(用unyaffs命令解壓system.img),解壓出來的有各種應用,庫等等,你可以修改或者替換
二、重新打包system.img,雖然我不知道為什麼要這樣做,但是我知道這樣做是可以的.
呵呵,linux沒有不可能的事情.朝鮮的 紅星操作系統就是例子.
具體辦法是
system/ 這個目錄,這個目錄就是用來生成system.img 的.
mkyaffs2image system/ system.img
在Ubuntu中第一次使用mkyaffs2image命令時,會提示
mkyaffs2image:找不到命令
還需要安裝mkyaffs2image
http://code.google.com/p/fatplus/downloads/detail?name=yaffs2-source.tar&can=2&q=
下載yaffs2-source.tar
解壓後,進入utils文件夾,然後make
將make之後生成的mkyaffs2image文件拷貝到/usr/bin目錄下
$ su
# cp mkyaffs2image /usr/bin/
# chmod 777 /usr/bin/mkyaffs2image
之後
$ mkyaffs2image
mkyaffs2image: image building tool for YAFFS2 built Jan 6 2012
usage: mkyaffs2image dir image_file [convert]
dir the directory tree to be converted
image_file the output file to hold the image
'convert' proce a big-endian image from a little-endian machine
表明安裝成功,同時也可以看到該命令的用法
mkyaffs2image dir image_file
例如:
mkyaffs2image am1808-fs am1808-fs.yaffs//創建jffs2文件
搞Android的同學經常會接觸到system.img。但是該文件經常以兩種格式出現:raw和sparse。
一種是raw ext4 image,即經常說的raw image,使用file觀察它: 其特點是完整的ext4分區鏡像(包含很多全零的無效填充區),可以直接使用mount進行掛載,因此比較大(一般1G左右)。
[java] view plain
$ file system.img
system.img: Linux rev 1.0 ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9f25b (extents) (large files)
信息非常明確了。
㈡ idea6410開發板都有哪些功能支持什麼操作系統
http://item.taobao.com/auction/item_detail-0db2-.htm
支持的操作系統很能多的,至少6種:
一、WinCE6.0軟體資源(點擊展開)
軟體特性:
·CPU主頻穩定工作於667MHz
·視頻硬體編碼、解碼支持MPEG-4/H263/H264/VC-1
·2D、3D圖形硬體加速、D3D Mobile,支持OpenGL ES1.1 & 2.0
·支持SD卡+USB2.0升級系統
·支持TCPMP播放器完美硬體解碼,MPEG-4/H264/VC-1在D1解析度下音視頻解碼35fps
·支持MediaPlayer + Directshow視頻硬體解碼
·支持Camera回顯、H264/MPEG-4視頻高效率編碼
·支持JPEG圖片硬體編解碼
·支持WIFI、藍牙、3G、GPS等外置模塊
·支持錄音並存儲存儲至nand flash
·支持顯示開機進度條、開機logo
·支持即時通工具MSN、SKYPE、QQ
·支持OFFICE、PDF閱讀器
·支持Adobe Flash Lit,IE瀏覽器在線播放視頻
·提供豐富的測試源碼實例:視頻編碼實例、視頻解碼實例、JPEG編碼實例、JPEG解碼實例、Camera回顯、拍照、錄像實例、多重解碼分屏顯示實例、顯示處理、縮放,TV OUT實例等,驅動源碼+上層測試實例源碼,為用戶提供豐富、全面的參考資料
軟體資源:
WinCE6.0 BSP軟體資源
類別 功能特性 描述
Bootloader Stepldr ★ 提供源碼,最終生成鏡像STEPLDR.bin
Eboot ★ 提供源碼,最終生成鏡像EBOOT.bin
Eboot功能強大,主要包括:
1、網路下載:可設靜態IP、HDCP獲取動態IP、Mac地址設置、開機自動通過網路下載內核等功能
2、USB下載:通過USB OTG 2.0介面,高速更新鏡像
3、格式化Nand Flash
4、格式化BinFS
5、低級格式化
6、設置啟動延遲時間
7、開機啟動進度條
Sdboot 提供可使用的二進制
1、SD啟動、通過USB下載並燒寫鏡像(取代JTAG燒寫)
2、任意更換開機LOGO
底層驅動
程序 DISPLAY LCD顯示驅動,★ 提供源代碼
顯示驅動特點:
1、支持多款不同尺寸的液晶屏,3.5寸、4.3寸、7寸、10.2寸、10.4寸(LVDS)
2、支持16/18/24Bpp模式
3、支持屏幕旋轉
TOUCH 觸摸屏驅動,★ 提供源碼
DM9000A DM9000網口驅動,★ 提供源碼
CAMERA 攝像頭驅動,支持OV9650/9653/9655, ★ 提供源碼(選配)
HSMMC SD/MMC/SDIO驅動,★ 提供源碼
IIC IIC驅動,★ 提供源碼
JPEG JPEG驅動,★ 提供源碼
SPI SPI驅動,★ 提供源碼
Keybd 按鍵驅動程序,支持板載用戶按鍵、外置矩陣按鍵 ★ 提供源碼
NANDFLASH FMD模式Nand Flash驅動,支持512 Byts小Page、2K bytes大Page,驅動兼容128Mbit~8Gbit容量 ★ 提供源碼
SERIAL 串口驅動,4個UART ★ 提供源碼
WAVEDEV 音頻驅動,支持AC97和IIS,默認驅動為AC97(WM9714) ★ 提供源碼
CF_ATA CF卡,ATA硬碟驅動,提供源碼
CMM ★ 提供源碼
DMA ★ 提供源碼
DrvLib ★ 提供源碼
MFC 多媒體硬體編解碼驅動, ★ 提供源碼
OTG USB OTG驅動,僅支持Device功能, ★提供源碼
USB USB HOST驅動, ★ 提供源碼
POWERBUTTON ★ 提供源碼
POWERCONTROL ★ 提供源碼
UAO ★提供源碼
WIFI_SDIO wifi模塊驅動, ★ 提供源碼(選配)
上層應用程序 MFC視頻編解碼
測試程序 提供源碼、用戶手冊,支持MPEG-4/H264/H263/VC-1
詳細的視頻編碼、解碼實例和API操作文檔
DirectShow filter
硬體解碼程序 提供源碼,源碼內容包括
AACDecoderFilter
FrameExtractFilter
MFCDecoderFilter
MP4testcode
mpeg4ip_mp4v2
SsapMp4Parser
JPEG編解碼測試程序 提供源碼、API操作文檔
OpenGL測試程序 提供源碼、用戶手冊, 2D/3D硬體圖形加速(OpenGL ES1.1&2.0)
Camera預覽和編碼測試程序 提供源碼 支持OV9650/9653/9655 CMOS圖像感測器
串口測試程序 提供源碼 測試串口通訊的程序
TCPMP播放器 完美硬體解碼MPEG-4/H263/H264/VC-1
支持avi、mp4、m4v、mov、3gp、flv、mpg等擴展格式
支持DIVX、XVID
支持解碼MP1、MP2、MP3、AC3、AAC等音頻格式
D1解析度(720*576)下,視頻解碼40fps以上
錄音程序 錄音測試程序,支持永久存儲至nand flash
Flash播放器 一款不錯的flash 播放器
Skype 即時通訊工具,支持信息、語音聊天
MSN WinCE6.0自帶即時通訊工具
QQ 騰訊QQ,支持在線聊天、QQ群、發送接收文件等
在線視頻 支持在線播放視頻
OFFICE軟體 Word、Excel、PowerPoint、PDF、txt等閱覽
PC端
開發環境及燒寫軟體 DNW V0.60C 串口調試終端、USB下載鏡像工具
IROM_Fusing_Tool 燒寫IROM_SD_EBOOT.NB0到SD卡的工具
Microsoft Visual Studio 2005 集成開發環境,系統定製、編譯、調試環境 應用程序開發環境
Windows Embedded CE 6.0 內核定製、裁剪插件
Microsoft Activesync PC和WinCE的同步軟體,同步建立後,可通過USB Device口與PC間進行數據交換,應用程序單步調試等
二、Linux2.6.28軟體資源(點擊展開)
Linux2.6.28 BSP軟體資源
類別 功能特性 描述
Bootloader u-boot 版本:u-boot-1.1.6
主要功能:
1、支持Nand Flash擦除、讀、寫
2、支持USB 下載鏡像
3、支持列印、設置、保存環境變數
4、支持內存內容顯示、對比、修改
5、支持bootm、bootargs設置
★ 提供源代碼
Sdboot 支持SD啟動、通過USB下載並燒寫鏡像(取代JTAG燒寫)
內核及
設備驅動
程序 內核 內核版本:Linux-2.6.28
系統時鍾 系統主頻:533MHz
顯示驅動 支持多種不同尺寸液晶屏:3.5寸、4.3寸、7寸、10.2寸、10.4寸
★ 提供源碼
TOUCH 觸摸屏驅動 ★ 提供源碼
DM9000 DM9000網口驅動 ★ 提供源碼
CAMERA 攝像頭驅動,支持OV9650/9653/9655, ★ 提供源碼(選配)
HSMMC SD/MMC/SDIO驅動 ★ 提供源碼
IIC IIC驅動 ★ 提供源碼
SPI SPI驅動 ★ 提供源碼
NANDFLASH NANDFLASH FMD模式Nand Flash驅動,支持512 Byts小Page、2K bytes大Page,驅動兼容128Mbit~8Gbit容量 ★ 提供源碼
SERIAL 串口驅動,4個UART ★ 提供源碼
WAVEDEV 音頻驅動,支持AC97和IIS,默認驅動為AC97(WM9714) ★ 提供源碼
USB Host 支持USB鍵盤、滑鼠、U盤等 ★ 提供源碼
DMA DMA驅動 ★ 提供源碼
JPEG JPEG硬體編解碼驅動 ★ 提供源碼
MFC 多媒體硬體編解碼驅動 ★ 提供源碼
TV OUT 支持電視輸出 ★ 提供源碼
2D/3D 2D/3D硬體加速驅動 OpenGLES1.1 & 2.0、D3DM
文件系統 NFS文件系統 支持系統啟動NFS掛載網路文件系統
Yaffs 支持yaffs文件系統
交叉編譯器 cross-4.2.2-eabi.tar.bz2 交叉工具鏈
圖形界面 Qtopia 2.2.0 圖形界面支持多種功能
1、圖片瀏覽器
2、MediaPlayer
3、日歷、時鍾、計算器
3、瀏覽器
4、文件管理器
5、終端
6、多款游戲
7、觸摸校正程序
8、插件管理器
等等功能
上層
應用
程序 H.264 display H.264硬體解碼測試程序
MPEG-4 display MPEG-4硬體解碼測試程序
H.263 display H.263硬體解碼測試程序
VC-1 display VC-1硬體解碼測試程序
4-windows display 多重解碼,四分屏硬體解碼測試程序
Camera preview & MFC encoding Camera採集回顯及MFC編碼測試程序
MFC decoding & Camera preview MFC解碼及camera回顯測試程序
Camera input and JPEG encoding Camera 採集及JPEG編碼測試程序
JPEG decoding and display JPEG解碼機顯示
MFC decoding & Camera preview thru TV TV輸出MFC解碼及camera回顯
H.264 decoding thru TVOUT TV輸出 H.264解碼
PC端
(windows xp)
燒寫工具 DNW V0.60C 串口調試終端、USB下載鏡像工具
moviNAND_Fusing_Tool.exe 燒寫啟動代碼到SD卡的工具
三、Android 1.5軟體資源(點擊展開)
Android1.5 BSP軟體資源
類別 功能特性 描述
Bootloader u-boot 版本:u-boot-1.1.6
主要功能:
1、支持Nand Flash擦除、讀、寫
2、支持USB 下載鏡像
3、支持列印、設置、保存環境變數
4、支持內存內容顯示、對比、修改
5、支持bootm、bootargs設置
★ 提供源代碼
Sdboot 支持SD啟動、通過USB下載並燒寫鏡像(取代JTAG燒寫)
內核及
設備驅動
程序 內核 內核版本:Linux-2.6.27
系統時鍾 系統主頻:533MHz
顯示驅動 4.3寸屏(480*272)/7寸屏(800*480) ★ 提供源碼
TOUCH 觸摸屏驅動 ★ 提供源碼
DM9000 DM9000網口驅動 ★ 提供源碼
HSMMC SD/MMC/SDIO驅動 ★ 提供源碼
IIC IIC驅動 ★ 提供源碼
SPI SPI驅動 ★ 提供源碼
KEYBD 按鍵驅動程序 ★ 提供源碼
WAVEDEV 音頻驅動,支持AC97和IIS,默認驅動為AC97(WM9714) ★ 提供源碼
DMA DMA驅動 ★ 提供源碼
RTC 實時時鍾驅動
USB USB Device驅動
JPEG JPEG硬體編解碼驅動 ★ 提供源碼
MFC 多媒體硬體編解碼驅動 ★ 提供源碼
TV OUT 支持電視輸出 ★ 提供源碼
ROTATOR 屏幕旋轉驅動 ★ 提供源碼
2D/3D 2D/3D硬體加速驅動 OpenGLES1.1 & 2.0、D3DM
交叉編譯器 arm-none-linux-gnueabi 交叉工具鏈
上層
應用
程序 Alarm Clock 這是Android 下一個鬧鍾程序,可以設置鬧鈴時間、鈴聲選擇等等
ASTRO 文件管理器
Mediaplayer 不錯的視頻播放器,透明的工具條、可以橫豎旋轉屏幕
Music 音頻播放器,支持專輯分類,藝術家、專輯、歌曲、播放列表、派對隨機播放、背景播放、搜索等功能
Picsay 一款強大的圖片編輯軟體,通過該軟體可以編輯圖片、添加標題、文字說明、裝飾圖片,在圖片上添加文字、添加小圖片等等
Gallery 一個非常好的圖片瀏覽控制項,支持圖片放大、縮小、上一張、下一張、幻燈片演示、共享、旋轉、裁切、圖片信息等
Browser Android 下的Brower 功能非常強大,支持網頁放大、縮小、跳轉、屬性設置等
Panda Reader 熊貓看書是android下一款用於智能設備的閱讀器,功能相當的強大。四大功能模塊:本地圖書、在線書庫、電子雜志、我的收藏。
1、TXT動態載入實現流暢閱讀
2、主題換膚:海藍、銀灰、金黃
3、多種滾屏方式、滾屏速度自由選擇
4、歷史記錄的自動保存
5、色彩的設定:背景圖片、背景顏色、文本顏色
6、字體的設置:字體大小、字體屬性、字間距、行間距
7、全盤文件任意搜索
8、支持中英文切換
9、可瀏覽ZIP文件
PC端燒
寫工具
(Windows XP) DNW V0.60C 串口調試終端、USB下載鏡像工具
moviNAND_Fusing _Tool.exe 燒寫啟動代碼到SD卡的工具
四、Android 0.9軟體資源(點擊展開)
Android 0.9 BSP軟體資源
類別 功能特性 描述
Bootloader u-boot 版本:u-boot-1.1.6
主要功能:
1、支持Nand Flash擦除、讀、寫
2、支持USB 下載鏡像
3、支持列印、設置、保存環境變數
4、支持內存內容顯示、對比、修改
5、支持bootm、bootargs設置
★ 提供源代碼
Sdboot 支持SD啟動、通過USB下載並燒寫鏡像(取代JTAG燒寫)
內核及
設備驅動
程序 內核 內核版本:Linux-2.6.29.1
系統時鍾 系統主頻:533MHz
顯示驅動 4.3寸屏(480*272) ★ 提供源碼
TOUCH 觸摸屏驅動 ★ 提供源碼
UART 4路串口驅動 ★ 提供源碼
256M Nand Flash Nand Flash驅動,256M Bytes ★ 提供源碼
Keybd 按鍵驅動,默認功能:上、下、左、右、確定、返回 ★ 提供源碼
RTC 實時時鍾驅動 ★ 提供源碼
SD/MMC SD/MMC驅動 ★ 提供源碼
編譯器 Arm-none-linux-gnueabi 交叉工具鏈
圖形界面 androidfs-sdk_m5-rc15-fix.tar Android 0.9
五、Ubuntu 9.04軟體資源(點擊展開)
Ubuntu-9.04 BSP軟體資源
類別 功能特性 描述
Bootloader u-boot 版本:u-boot-1.1.6
主要功能:
1、支持Nand Flash擦除、讀、寫
2、支持USB 下載鏡像
3、支持列印、設置、保存環境變數
4、支持內存內容顯示、對比、修改
5、支持bootm、bootargs設置
★ 提供源代碼
Sdboot 支持SD啟動、通過USB下載並燒寫鏡像(取代JTAG燒寫)
內核及
設備驅動
程序 內核 內核版本:Linux-2.6.29.1
系統時鍾 系統主頻:533MHz
顯示驅動 4.3寸屏(480*272) ★ 提供源碼
TOUCH 觸摸屏驅動 ★ 提供源碼
UART 4路串口驅動 ★ 提供源碼
256M Nand Flash Nand Flash驅動,256M Bytes ★ 提供源碼
Keybd 按鍵驅動,默認功能:上、下、左、右、確定、返回 ★ 提供源碼
RTC 實時時鍾驅動 ★ 提供源碼
SD/MMC SD/MMC驅動 ★ 提供源碼
編譯器 Arm-none-linux-gnueabi 交叉工具鏈
圖形界面 Lxde-ubuntu Ext3 rootfs
六、 DJYOS操作系統介紹(點擊展開)
㈢ 嵌入式的文件系統是什麼意思 NFS和yaffs的區別、
嵌入式的文件系統是所有嵌入式系統所應用的文件系統。
大多數嵌入式系統採用了Linux。
嵌入式系統對文件系統的要求
要求文件系統在頻繁的文件操作(例如,新建,刪除,截斷)下能夠保持較高的讀寫性能,要求低碎片化。
日誌文件系統(XFS,ReiserFS,Ext3等)能保持數據的完整性,但消耗過多系統資源的弱點使之不能成為嵌入式系統中的主流應用。並且這些都是專門為硬碟這類的存儲設備優化,對於flash這類的存儲介質並不適用。
嵌入式文件系統的載體是以Flash為主的存儲介質,Flash的擦除次數是有限的,所以為了延長Flash的使用壽命,應該盡量減少對Flash的寫入操作。
嵌入式文件系統的載體是以Flash為主的存儲介質,Flash的擦除次數是有限的,所以為了延長Flash的使用壽命,應該盡量使對Flash的寫入操作均勻分布在整個Flash上。
NFS是Net File System的簡寫,即網路文件系統。網路文件系統是FreeBSD支持的文件系統中的一種,它允許一個系統在網路上與它人共享目錄和文件。通過使用NFS,用戶和程序可以象訪問本地文件一樣訪問遠端系統上的文件。
YAFFS(Yet Another Flash File System)是第一個專門為NAND Flash存儲器設計的嵌入式文件系統,適用於大容量的存儲設備;並且是在GPL(General Public License)協議下發布的,可在其網站免費獲得源代碼。
㈣ 請詳細說明linux內核源碼中make menuconfig命令, .config文件, Kconfig文件, Makefile文件的關系
make menuconfig是菜單配置命令,就是自己選擇配置哪些功能
.config是配置文件,完成配置後會在內核源代碼根目錄下產生該文件
Makefile,相應文件夾下的Makefile用於編譯相應文件夾下的文件
Kconfig暫時不知道
㈤ 如何配置uClinux2.6內核使其支持jffs2格式的文件系統
目前flash的文件系統比較多,用的比較多的就是JFFS2文件系統。基於NOR flash上的JFFS2文件系統可以說算是比較成熟了,支持NAND flash的JFFS2也已經發布了。源代碼可以到http://www.linux-mtd.infradead.org上面下載。但是在我的測試過程中,在nand flash上掛接的JFFS2文件系統很不穩定,經常有CRC錯誤產生。特別是進行寫操作的時候,每次復位都會產生CRC錯誤,可以說支持NAND flash的JFFS2文件系統目前還不成熟。而YAFFS文件系統則是專門針對NAND flash的,源代碼可以到
http://www.aleph1.co.uk/yaffs/index.html上下載。在測試過程中穩定性能比JFFS2文件系統要穩定的多,而且mount分區的時間也比JFFS2文件系統少的多。用JFFS2 mount一個2m的文件系統大約需要1s。下面分別介紹在uclinux下面使用JFFS2和YAFFS文件系統。
1、JFFS2
到http://www.linux-mtd.infradead.org上面下載最新的MTD和JFFS2壓縮包。壓縮包裡面還有有關的內核補丁和一些MTD的相關工具。主要的補丁就是ilookup- 2.4.23.patch,因為最新的MTD驅動中要用到一個ilookup()函數。打完補丁、更新了MTD驅動和JFFS2文件系統之後就開始寫自己 nand flash驅動了。如果不想把JFFS2作為根文件系統的話,還需要修改MTD_BLOCK_MAJOR。驅動可以參考裡面的例子,最簡單的就是參考 spia.c。
寫驅動主要工作是定義flash分區結構、定義flash讀寫地址、寫控制flash的**_hwcontrol()函數。具體的操作要看所用的nand flash的晶元資料。相對NOR flash來說驅動要簡單多了。:)
改完之後再配置
Memory Technology Devices(MTD)下
CONFIG_MTD=Y
CONFIG_MTD_DEBUG=Y
CONFIG_MTD_DEBUG_VERBOSE=3
CONFIG_MTD_PARTITIONS=Y
CONFIG_MTD_CHAR=Y
CONFIG_MTD_BLOCK=Y
NAND Flash Device Drivers下
CONFIG_MTD_NAND=Y
定義自己的驅動文件
File systems下
CONFIG_JFFS2_FS=Y
CONFIG_JFFS2_FS_DEBUG=2
CONFIG_JFFS2_FS_NAND=y /*這個是新加的*/
在uClinux v1.3.4 Configuration下
Flash Tools下
CONFIG_USER_MTDUTILS=Y
CONFIG_USER_MTDUTILS_ERASE=Y
CONFIG_USER_MTDUTILS_ERASEALL=Y
CONFIG_USER_MTDUTILS_MKFSJFFS2=Y
最後就是辛苦了調試工作了。:(MTD驅動調試完之後,就可以在上面掛接JFFS2文件系統了。參看flash分區情況:cat /proc/mtd,擦除分區:eraseall /dev/mtd*.例如把第一個分區mount到/mnt目錄下面:
先:eraseall /dev/mtd0
然後:mount -t jffs2 /dev/mtdblock0 /mnt
2、YAFFS
YAFFS意義為'yet another flash file system',也是一個開源的文件系統。YAFFS是目前為止唯一一個專門為NAND flash設計的文件系統,具有很好的可移植性,能夠在linux,uclinux,和wince
下面運行。
在http://www.aleph1.co.uk/yaffs/index.html上下載源代碼。壓縮包裡面也包含YAFFS的說明文檔。YAFFS文件系統的源文件就devextras.h,yaffs_ecc.c, yaffs_ecc.h,yaffs_guts.c,yaffs_guts.h,yaffs_mtdif.h,yaffs_mtdif.c和 yportenv.h
另外需要配置的宏:CONFIG_YAFFS_FS 和CONFIG_YAFFS_MTD_ENABLED,就是配置在mtd上面掛接YAFFS,其它還有一些輔助配置需要時也可以配置。
在fs目錄下面建一個yaffs目錄,把以上說的文件考裡面去,新建一個makefile:
O_TARGET := yaffs.o
obj-y := yaffs_fs.o yaffs_guts.o yaffs_mtdif.o yaffs_ecc.o
obj-m := $(O_TARGET)
include $(TOPDIR)/Rules.make
接下來就是改fs目錄下面config.in和makefile,在配置YAFFS的時候,把YAFFS連接進去。
如果像前面一樣已經把NAND MTD驅動調好了,加YAFFS就很簡單了。因為YAFFS是自己做ECC校驗的,所以要把MTD驅動裡面的ECC去掉。在驅動裡面改成this->eccmode = NAND_ECC_NONE就可以了。
另外YAFFS是用mkyaffs來擦除flash,所以在mtd-utils中加上mkyaffs.c,一起編譯進去。
最後就是編譯了,呵呵。中間會有一些警告沒有關系的,就是寫沒有用的變數和函數,不過話說回來YAFFS的代碼寫的確實不太規范。當然它的性能確實沒話說。有興趣的可以試一下。
㈥ 新手如何學習嵌入式開發板
原文鏈接:網頁鏈接
我是1999年上的大學,物理專業。在大一時,我們班裡普遍彌漫著對未來的不安,不知道學習了物理後出去能做什麼。你當下的經歷、當下的學習,在未來的一天肯定會影響到你。畢業後我們也各自找到了自己的職業:出國深造轉行做金融、留校任教做科研、設計晶元、寫程序、創辦公司等等,這一切都離不開在校時學到的基礎技能(數學、IT、電子電路)、受過煅煉的自學能力。
所以,各位正在迷茫的在校生,各位正在嘗試轉行的程序員,未來一定有你的位置,是好是壞取決於你當下的努力與積累。
我不能預言幾年後什麼行業會熱門,也不能保證你照著本文學習可以發財。我只是一個有十幾年經驗的程序員,給對編程有興趣的你,提供一些建議。
1.程序員的三大方向
程序員的方向,一般可以分為3類:專業領域、業務領域、操作系統領域。你了解它們後,按興趣選擇吧。
對於專業領域,我提供不了建議。
業務,也就是應用程序,它跟操作系統並不是截然分開的:
①開發實體產品時,應用程序寫得好的人,有時候需要操作系統的知識,比如調度優先順序的設置、知道某些函數可能會令進程休眠。
②寫應用程序的人進階為系統工程師時,他需要從上到下都了解,這時候就需要有操作系統領域的知識了,否則,你怎麼設計整個系統的方案呢?
③做應用程序的人,需要了解行業的需求,理解業務的邏輯。所以,當領導的人,多是做應用的。一旦鑽入了某個行業,很難換行業。
④而操作系統領域,做好了這是通殺各行業:他只負責底層系統,在上面開發什麼業務跟他沒關系。這行很多是技術宅,行業專家。
⑤操作系統和業務之間並沒有一個界線。有操作系統經驗,再去做應用,你會對系統知根知底,碰到問題時都有解決思路。有了業務經驗,你再了解一下操作系統,很快就可以組成一個團隊自立門戶,至少做個CTO沒問題。
1.1 專業領域
它又可以分為下面2類。
1.1.1 學術研究
比如語音、圖像處理、人工智慧,這類工作需要你有比較強的理論知識,我傾向於認為這類人是「科學家」,他們鑽研多年,很多時候是在做學術研究。
在嵌入式領域,需要把他們的成果用某種演算法表達出來,針對某種晶元進行優化,這部分工作也許有專人來做。
1.1.2 工程實現
也有這樣一類人,他們懂得這些專業領域的概念,但是沒有深入鑽研。可以使用各類開源資料實現某個目標,做出產品。比如圖像處理,他懂得用opencv里幾百個復雜函數來實現頭像識別。有時候還可以根據具體晶元來優化這些函數。
「專業領域」不是我的菜,如果你要做這一塊,我想最好的入門方法是在學校學習研究生、博士課程。
1.2 業務領域
換句話說,就是應用程序,這又可以分為下面2類。
1.2.1 界面顯示
做產品當然需要好的界面,但是,不是說它不重要,是沒什麼發展後勁。
現在的熱門詞是Android APP和IOS APP開發。你不要被Android、IOS兩個詞騙了,它們跟以前的VC、VB是同一路貨色,只是、僅僅是一套GUI控制項的實現。
希望沒有冒犯到你,我有理由。
一個程序需要有GUI界面,但是程序的內在邏輯才是核心。Android、IOS的開發工具給我們簡化了GUI的開發,並提供了這些控制項的交互機制,封裝並提供了一些服務(比如網路傳輸)。但是程序內部的業務邏輯、對視頻圖像聲音的處理等等,這才是核心。另外別忘了伺服器那邊的後台程序:怎樣更安全地保存數據、保護客戶的隱私,怎樣處理成千上萬上百萬的並發訪問,等等,這也是核心。
但是,從Android、IOS APP入門入行,這很快!如果你是大四,急於找到一份工作,那麼花上1、2個月去學習Android或IOS,應該容易找到工作,畢竟APP的需求永遠是最大的,現在這兩門技術還算熱門。在2011、2012年左右,Android程序員的起薪挺高,然後開始下滑。Android APP的入門基本只要1個月,所以懂的人也越來越多。2013、2014年,IOS開發的工資明顯比Android高了,於是各類IOS培訓也火曝起來。中華大地向來不缺速成人才,估計再過一陣子IOS工程師也是白菜價了。
會Android、IOS只是基本要求,不信去51job搜搜Android或IOS,職位要求里肯定其他要求。
1.2.2 業務邏輯
舉個簡單例子,做一個打卡軟體,你需要考慮這些東西:
①正常流程是上班下班時都要打卡
②有人忘記了怎麼辦?作為異常記錄在案,推送給管理員
③請假時怎麼處理?
④加班怎麼處理?
對於更復雜的例子,視頻會議系統里,各個模塊怎麼對接,各類協議怎麼兼容,你不深入這個行業,你根本搞不清楚。
應用開發的職位永遠是最多的,入門門檻也低。基本上只要你會C語言,面試時表現比較得體,一般公司都會給你機會。因為:
①你進公司後,還需要重新培訓你:熟悉它們的業務邏輯。
②你要做的,基本也就是一個個模塊,框架都有人給你定好了,你去填代碼就可以了。
說點讓你高興的事:軟體公司里,做領導的基本都是寫應用程序的(當然還有做市場的)。寫應用程序的人,對外可以研究市場接待客戶,對內可以管理程序員完成開發,不讓他做領導讓誰做?
如果你的志向是寫應用程序,那麼我建議你先練好基本功:數據結構、演算法是必備,然後憑興趣選擇資料庫、網路編程等等進行深入鑽研。
最後,選擇你看好的、感興趣的行業深耕個10年吧。做應用開發的人選擇了某個行業,後面是很難換行業的,選行很重要!
1.3 操作系統領域
UCOS太簡單,VxWorks太貴太專業,Windows不玩嵌入式了,IOS不開源,所以對於操作系統領域我們也只能玩Linux了。
在嵌入式領域Linux一家獨大!
Android呢?Android跟QT一樣,都是一套GUI系統。只是Google的實力太強了,現在Android無處不在,所以很多時候Linux+Android成了標配。注意,在這里我們關心的是Android的整個系統、裡面的機制,而不是學習幾個API然後開發界面程序。操作系統領域所包含的內容,簡單地說,就是製作出一台裝好系統的專用「電腦」,可以分為:
①為產品規劃硬體:
按需求、性能、成本選擇主晶元,搭配周邊外設,交由硬體開發人員設計。
②給單板製作、安裝操作系統、編寫驅動
③定製維護、升級等系統方案
④還可能要配置、安裝Android等GUI系統:
⑤為應用開發人員配置開發環境
⑥從系統角度解決疑難問題
這個領域,通常被稱為「底層系統」或是「驅動開發」。
先解決2個常見誤區:
①這份工作是寫驅動程序嗎?
看看上面羅列的6點,應該說,它包含驅動開發,但遠遠不只有驅動開發。
②我們還需要寫驅動嗎?不是有原廠嗎?或者只需要改改就可以?
經常有人說,晶元原廠都做好驅動了,拿過來改改就可以了。如果,你的硬體跟原廠的公板完全一樣,原廠源碼毫無BUG,不想優化性能、削減成本,不想做一些有特色的產品,那這話是正確的。
但是在這個不創新就是找死的年代,可能嗎?!原因有二:
①即使只是修改代碼,能修改的前提是能理解;能理解的最好煅煉方法是從零寫出若干驅動程序。
②很多時候,需要你深度定製系統。
以前做聯發科手機只需要改改界面就可以出貨了,現在山寨廠一批批倒下。大家都使用原廠的方案而不加修改時,最後只能拼成本。
舉個例子,深圳有2家做交通攝像頭、監控攝像頭的廠家,他們曾經找我做過4個項目:
①改進廠家給的SD卡驅動性能,使用DMA。
②換了Flash型號後,系統經常出問題,需要修改驅動BUG。
③觸摸屏點擊不準,找原因,後來發現是旁路電容導致的。
④裁減成本,把4片DDR換為2片DDR,需要改bootloader對DDR的初始化。
這些項目都很急,搞不定就無法出貨,這時候找原廠?除非你是中興華為等大客戶,否則誰理你?
我在中興公司上班時,寫驅動的時間其實是很少的,大部分時間是調試:系統調優,上幫APP工程師、下幫硬體工程師查找問題。我們從廠家、網上得到的源碼,很多都是標準的,當然可以直接用。但是在你的產品上也許優化一下更好。比如我們可以把攝像頭驅動和DMA驅動揉合起來,讓攝像頭的數據直接通過DMA發到DSP去。我們可以在軟體和硬體之間起橋梁作用,對於實體產品,有可能是軟體出問題也可能是硬體出問題,一般是底層系統工程師比較容易找出問題。
當硬體、軟體應用出現問題,他們解決不了時,從底層軟體角度給他們出主意,給他們提供工具。再比如方案選擇:晶元性能能否達標、可用的BSP是否完善等等,這只能由負責整個方案的人來考慮,他必須懂底層。
在操作系統領域,對知識的要求很多:
①懂硬體知識才能看懂電路圖
②英文好會看晶元手冊
③有編寫、移植驅動程序的能力
④對操作系統本身有一定的理解,才能解決各類疑難問題
⑤理解Android內部機制
⑥懂匯編、C語言、C++、JAVA
它絕對是一個大坑,沒有興趣、沒有毅力的人慎選。
①這行的入門,絕對需要半年以上,即使全天學習也要半年。
②它的職位,絕對比APP的職位少
③並且你沒有1、2年經驗,招你到公司後一開始你做的還是APP。
優點就是:
①學好後,行業通殺,想換行就換行;想自己做產品就自己做產品。
②相比做應用程序的人,不會被經常變動的需求搞得天天加班。
③門檻高,當然薪水相對就高。
操作系統領域,我認為適合於這些人:
①硬體工程師想轉軟體工程師,從底層軟體入門會比較好
②單片機工程師,想升級一下。會Linux底層的人肯定會單片機,會單片機的人不一定會Linux。
③時間充足的學生:如果你正讀大二大三,那麼花上半年學習嵌入式Linux底層多有益處。
④想掌握整個系統的人,比如你正在公司里寫APP,但是想升為系統工程師,那麼底層不得不學。
⑤想自己創業做實體產品的工程師,你有錢的話什麼技術都不用學,但是如果沒錢又想做產品,那麼Linux底層不得不學。
⑥做Linux APP的人,沒錯,他們也要學習。
這部分人不需要深入,了解個大概就可以:bootloader是用來啟動內核,Linux的文件系統(第1個程序是什麼、做什麼、各目錄幹嘛用)、APP跟驅動程序的調用關系、工具鏈,有這些概念就可以了
本文中,就把操作系統默認為Linux,講講怎麼學習嵌入式Linux+Android系統。
1.4 嵌入式Linux+Android系統包含哪些內容
嵌入式Linux系統包含哪些東西?不要急,舉一個例子你就知道了。
①電腦一開機,那些界面是誰顯示的?
是BIOS,它做什麼?一些自檢,然後從硬碟上讀入windows,並啟動它。
類似的,這個BIOS對應於嵌入式Linux里的bootloader。這個bootloader要去Flash上讀入Linux內核,並啟動它。
②啟動windows的目的是什麼?
當然運行應用程序以便上網、聊天什麼的了。
這些上網程序、聊天程序在哪?
在C盤、D盤上。
所以,windows要先識別出C盤、D盤。在Linux下我們稱之為根文件系統。
③windows能識別出C盤、D盤,那麼肯定有讀寫硬碟的能力。
這個能力我們稱之為驅動程序。當然不僅僅是操作硬碟,還有網卡、USB等等其他硬體。嵌入式Linux能從Flash上讀出並執行應用程序,肯定也得有Flash的驅動程序啊,當然也不僅僅是Flash。
簡單地說,嵌入式LINUX系統里含有bootloader、內核、驅動程序、根文件系統、應用程序這5大塊。而應用程序,我們又可以分為:C/C++、Android。
所以,嵌入式Linux+Android系統包含以下6部分內容:
①bootloader
②Linux內核
③驅動程序
④使用C/C++編寫的應用程序
⑤Android系統本身
⑥Android應用程序
Android跟Linux的聯系實在太大了,它的應用是如此廣泛,學習了Linux之後沒有理由停下來不學習Android。在大多數智能設備中,運行的是Linux操作系統;它上面要麼安裝有Android,要麼可以跟Android手機互聯。現在,Linux+Android已成標配。
2. 怎麼學習嵌入式Linux操作系統
本文假設您是零基礎,以實用為主,用最快的時間讓你入門;後面也會附上想深入學習時可以參考的資料。
在實際工作中,我們從事的是「操作系統」周邊的開發,並不會太深入學習、修改操作系統本身。
①操作系統具有進程管理、存儲管理、文件管理和設備管理等功能,這些核心功能非常穩定可靠,基本上不需要我們修改代碼。我們只需要針對自己的硬體完善驅動程序
②學習驅動時必定會涉及其他知識,比如存儲管理、進程調度。當你深入理解了驅動程序後,也會加深對操作系統其他部分的理解
③Linux內核中大部分代碼都是設備驅動程序,可以認為Linux內核由各類驅動構成
但是,要成為該領域的高手,一定要深入理解Linux操作系統本身,要去研讀它的源代碼。
在忙完工作,閑暇之餘,可以看看這些書:
①趙炯的《linux內核完全注釋》,這本比較薄,推薦這本。他後來又出了《Linux 內核完全剖析》,太厚了,搞不好看了後面就忘記前面了。
②毛德操、胡希明的《LINUX核心源代碼情景分析》,此書分上下冊,巨厚無比。當作字典看即可:想深入理解某方面的知識,就去看某章節。
③其他好書還有很多,我沒怎麼看,沒有更多建議
基於快速入門,上手工作的目的,您先不用看上面的書,先按本文學習。
2.1 入門路線圖
假設您是零基礎,我們規劃了如下入門路線圖。前面的知識,是後面知識的基礎,建議按順序學習。每一部分,不一定需要學得很深入透徹,下面分章節描述。
2.2 學習驅動程序之前的基礎知識
2.2.1 C語言
只要是理工科專業的,似乎都會教C語言。我見過很多C語言考試90、100分的,一上機就傻了,我懷疑他們都沒在電腦上寫過程序。
理論再好,沒有實踐不能幹活的話,公司招你去幹嘛?
反過來,實踐出真知,學習C語言,必須練練練、寫寫寫!
當你掌握基本語法後,就可以在電腦上練習一些C語言習題了;
當你寫過幾個C程序後,就可以進入下一階段的裸機開發了。
①不需要太深入
作為快速入門,只要你會編寫「Hello, world!」,會寫冒泡排序,會一些基礎的語法操作,暫時就夠了。
指針操作是重點,多練習;
不需要去學習過多的數據結構知識,只需要掌握鏈表操作,其他不用學習,比如:隊列、二叉樹等等都不用學;不需要去學習任何的函數使用,比如文件操作、多線程編程、網路編程等等;這些知識,在編寫Linux應用程序時會用,但是在操作系統特別是驅動學習時,用不著!
永往直前吧,以後碰到不懂的C語言問題,我們再回過頭來學習。
在後續的「裸機開發」中,會讓你繼續練習C語言,那會更實戰化。
C語言是在寫代碼中精進的。
②可以在Visual Studio下學習,也可以在Linux下學習,後者需要掌握一些編譯命令,我們暫時沒有提供C語言的教程,找一本C語言書,網上找找免費的C語言視頻(主要看怎麼搭建環境),就可以自學了。
2.2.2 PC Linux基本操作:
對於PC Linux,我們推薦使用Ubuntu,在它上面安裝軟體非常簡便。
我們的工作模式通常是這樣:在Windows下閱讀、編寫代碼,然後把代碼上傳到PC Linux去編譯。實際上,Ubuntu的桌面系統已經很好用了,我們拿到各種智能機可以很快上手,相信Ubuntu的桌面系統也可以讓你很快上手。為了提高工作效率,我們通常使用命令行來操作Ubuntu。
不用擔心,你前期只需要掌握這幾條命令就可以了,它們是如此簡單,我乾脆列出它們:
①cd : Change Directory(改變目錄)
cd 目錄名 // 進入某個目錄cd .. // cd 「兩個點」:返回上一級目錄cd - // cd 「短橫」:返回上一次所在目錄
②pwd : Print Work Directory(列印當前目錄 顯示出當前工作目錄的絕對路徑)
③mkdir : Make Directory(創建目錄)
mkdir abc // 創建文件夾abcmkdir -p a/b/c // 創建文件夾a,再a下創建文件夾b,再在b下創建文件夾c
④rm : Remove(刪除目錄或文件)
rm file // 刪除名為file的文件rm -rf dir // 刪除名為dir的目錄
⑤ls : List(列出目錄內容)
⑥mount : 掛載
mount -t nfs -o nolock,vers=2 192.168.1.123:/work/nfs_root /mntmount -t yaffs /dev/mtdblock3 /mnt
⑦chown : Change owner(改變文件的屬主,即擁有者)
chown book:book /work -R //對/work目錄及其下所有內容,屬主改為book用戶,組改為book
⑧chmod : Change mode(改變許可權),下面的例子很簡單粗暴
chmod 777 /work -R // 對/work目錄及其下所有內容,許可權改為可讀、可寫、可執行
⑨vi : Linux下最常用的編輯命令,使用稍微復雜,請自己搜索用法。
要練習這些命令,你可以進入Ubuntu桌面系統後,打開終端輸入那些命令;或是用SecureCRT、putty等工具遠程登錄Ubuntu後練習。
2.2.3 硬體知識
我們學習硬體知識的目的在於能看懂原理圖,看懂通信協議,看懂晶元手冊;不求能設計原理圖,更不求能設計電路板。
對於正統的方法,你應該這樣學習:
①學習《微機原理》,理解一個計算機的組成及各個部件的交互原理。
②學習《數字電路》,理解各種門電路的原理及使用,還可以掌握一些邏輯運算(與、或等)。
③《模擬電路》?好吧,這個不用學,至少我在工作中基本用不到它,現在全忘光了。
就我個人經驗來說,這些課程是有用的,但是:
①原理有用,實戰性不強。
比如《微機原理》是基於x86系統,跟ARM板子有很大差別,當然原理相通。
我是在接觸嵌入式編程後,才理解了這些課程。
②每本書都那麼厚,內容都很多,學習時間過長,自學有難度。
針對這些校園教材的不足,並結合實際開發過程中要用到的知識點,我們推出了《學前班_怎麼看原理圖》的系列視頻:
學前班第1課第1節___怎麼看原理圖之GPIO和門電路.wmv
學前班第1課第2.1節_怎麼看原理圖之協議類介面之UART.wmv
學前班第1課第2.2節_怎麼看原理圖之協議類介面之I2C.wmv
學前班第1課第2.3節_怎麼看原理圖之協議類介面之SPI.wmv
學前班第1課第2.4節_怎麼看原理圖之協議類介面之NAND Flash.wmv
學前班第1課第2.5節_怎麼看原理圖之協議類介面之LCD.wmv
學前班第1課第3節___怎麼看原理圖之內存類介面.wmv
學前班第1課第4.1節_怎麼看原理圖之分析S3C2410開發板.wmv
學前班第1課第4.2節_怎麼看原理圖之分析S3C2440開發板.wmv
學前班第1課第4.3節_怎麼看原理圖之分析S3C6410開發板.wmv
即使你只具備初中物理課的電路知識,我也希望能通過這些視頻,讓你可以看懂原理圖,理解一些常見的通信協議;如果你想掌握更多的硬體知識,這些視頻也可以起個索引作用,讓你知道缺乏什麼知識。
這些視頻所講到的硬體知識,將在《裸板開發》系列視頻中用到,到時可以相互對照著看,加深理解。
2.2.4 要不要專門學習Windows下的單片機開發
很多學校都開通了單片機的課程,很多人都是從51單片機、AVR單片機,現在比較新的STM32單片機開始接觸嵌入式領域,並且使用Windows下的開發軟體,比如keil、MDK等。
問題來了,要不要專門學習Windows下的單片機開發?
①如果這是你們專業的必修課,那就學吧
②如果你的專業跟單片機密切相關,比如機械控制等,那就學吧
③如果你只是想從單片機入門,然後學習更廣闊的嵌入式Linux,那麼放棄在Windows下學習單片機吧!
理由如下:
①Windows下的單片機學習,深度不夠
Windows下有很好的圖形界面單片機開發軟體,比如keil、MDK等。
它們封裝了很多技術細節,比如:
你只會從main函數開始編寫代碼,卻不知道上電後第1條代碼是怎麼執行的;
你可以編寫中斷處理函數,但是卻不知道它是怎麼被調用的;
你不知道程序怎麼從Flash上被讀入內存;
也不知道內存是怎麼劃分使用的,不知道棧在哪、堆在哪;
當你想裁剪程序降低對Flash、內存的使用時,你無從下手;
當你新建一個文件時,它被自動加入到工程里,但是其中的機理你完全不懂;
等等等。
②基於ARM+Linux裸機學習,可以學得更深,並且更貼合後續的Linux學習。實際上它就是Linux下的單片機學習,只是一切更加原始:所有的代碼需要你自己來編寫;哪些文件加入工程,需要你自己來管理。
在工作中,我們當然傾向於使用Windows下更便利的工具,但是在學習階段,我們更想學習到程序的本質。
一切從零編寫代碼、管理代碼,可以讓我們學習到更多知識:
你需要了解晶元的上電啟動過程,知道第1條代碼如何運行;
你需要掌握怎麼把程序從Flash上讀入內存;
需要理解內存怎麼規劃使用,比如棧在哪,堆在哪;
需要理解代碼重定位;
需要知道中斷發生後,軟硬體怎麼保護現場、跳到中斷入口、調用中斷程序、恢復現場;
你會知道,main函數不是我們編寫的第1個函數;
你會知道,晶元從上電開始,程序是怎麼被搬運執行的;
你會知道,函數調用過程中,參數是如何傳遞的;
你會知道,中斷發生時,每一個寄存器的值都要小心對待;
等等等。
你掌握了ARM+Linux的裸機開發,再回去看Windows下的單片機開發,會驚呼:怎麼那麼簡單!並且你會完全明白這些工具沒有向你展示的技術細節。
驅動程序=Linux驅動程序軟體框架+ARM開發板硬體操作,我們可以從簡單的裸機開發入手,先掌握硬體操作,並且還可以:
①掌握如何在PC Linux下編譯程序、把程序燒錄到板子上並運行它
②為學習bootloader打基礎:掌握了各種硬體操作後,後面一組合就是一個bootloader
2.2.5 為什麼選擇ARM9 S3C2440開發板,而不是其他性能更好的?
有一個錯誤的概念:S3C2440過時了、ARM9過時了。
這是不對的,如果你是軟體工程師,無論是ARM9、ARM11、A8還是A9,對我們來說是沒有差別的。
一款晶元,上面有CPU,還有眾多的片上設備(比如UART、USB、LCD控制器)。我們寫程序時,並不涉及CPU,只是去操作那些片上設備。
所以:差別在於片上設備,不在於CPU核;差別在於寄存器操作不一樣。
因為我們寫驅動並不涉及CPU的核心,只是操作CPU之外的設備,只是讀寫這些設備的寄存器。
之所以推薦S3C2440,是因為它的Linux學習資料最豐富,並有配套的第1、2期視頻。
2.2.6 怎麼學習ARM+Linux的裸機開發
學習裸機開發的目的有兩個:
①掌握裸機程序的結構,為後續的u-boot作準備
②練習硬體知識,即:怎麼看原理圖、晶元手冊,怎麼寫代碼來操作硬體
後面的u-boot可以認為是裸機程序的集合,我們在裸機開發中逐個掌握各個部件,再集合起來就可以得到一個u-boot了。
後續的驅動開發,也涉及硬體操作,你可以在裸機開發中學習硬體知識。
注意:如果你並不關心裸機的程序結構,不關心bootloader的實現,這部分是可以先略過的。在後面的驅動視頻中,我們也會重新講解所涉及的硬體知識。
推薦兩本書:杜春蕾的《ARM體系結構與編程》,韋東山的《嵌入式Linux應用開發完全手冊》。後者也許是國內第1本涉及在PC Linux環境下開發的ARM裸機程序的書,如果我說錯了,請原諒我書讀得少。
對於裸機開發,我們提供有2部分視頻:
①環境搭建
第0課第1節_剛接觸開發板之介面接線.wmv
第0課第2節_剛接觸開發板之燒寫裸板程序.wmv
第0課第3節_剛接觸開發板之重燒整個系統.wmv
第0課第4節_剛接觸開發板之使用vmwae和預先做好的ubuntu.wmv
第0課第5節_剛接觸開發板之u-boot打補丁編譯使用及建sourceinsight工程.wmv
第0課第6節_剛接觸開發板之內核u-boot打補丁編譯使用及建sourceinsight工程.wmv
第0課第7節_剛接觸開發板之製作根文件系統及初試驅動.wmv
第0課第8節_在TQ2440,MINI2440上搭建視頻所用系統.wmv
第0課第9節_win7下不能使用dnw燒寫的替代方法.wmv
.................
所有目錄:網頁鏈接
㈦ windows操作系統如何支持yaffs文件系統
1、修改內核源碼根目錄下的Makefile文件
#ARCH ?= arm
#CROSS_COMPILE ?=arm-linux-
2、修改arch/arm/plat-s3c24xx/common-smdk.c文件,修改Nand Flash的分區信息和Nand Flash的硬體信息。這里的分區一定要和你的bootloader的一致,你可以參考smdk_default_nand_part[]這個數據結構的做法。
3、還是2中用到的文件,修改static struct s3c2410_platform_nand smdk_nand_info = {
.tacls = 0,
.twrph0 = 30, //這 三個數字要改的 以前是20 60 20
.twrph1 = 0,
.nr_sets = ARRAY_SIZE(smdk_nand_sets),
.sets = smdk_nand_sets,
};
4、修改drivers/mtd/nand/s3c2410.c中s3c2410_nand_init_chip函數的NAND_ECC_SOFT為NAND_ECC_NONE。
5、晶振頻率:修改arch/arm/mach-s3c2440/mach-smdk2440.c
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
s3c24xx_init_clocks(12000000);//改成和你的一樣
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
6、添加對yaffs2文件系統的支持:
下載yaffs2的源碼包,解壓後進入其中,其加入Linux內核(打補丁的方式)
#cd yaffs2
#./patch-ker.sh c $you_kernel_path(你的內核代碼的目錄)
7、配置內核
先拷貝s3c2410開發板的默認配置到內核根目錄下,以簡化配置過程
# cp arch/arm/configs/s3c2410_defconfig .config
# make menuconfig
1.General setup --->
[*] Configure standard kernel features (for small systems) --->
2. System Type ---->
[*] S3C2410 DMA support [*] Support ARM920T processor
S3C2410 Machines --->
[*] SMDK2410/A9M2410
S3C2440 Machines --->
[*] SMDK2440
[*] SMDK2440 with S3C2440 CPU mole
3.Boot options --->
將 (root=/dev/hda1 ro init=/bin/bash console=ttySAC0) Default kernel command string
改成 (noinitrd root=/dev/mtdblock2 console=ttySAC0,115200 init=/linuxrc )
這里要特別注意root=/dev/mtdblock2 這個參數,mtdblock2是你的根文件系統所在的位置,和你在bootloader的分配有關,當然也和上述2。步驟的密切相關。不行的話多試幾次。
4.[*] Enable loadable mole support --->
[*] Mole unloading
[*] Automatic kernel mole loading
選擇這兩個,剩下的可以去掉
5.Device Drivers --->
<*> Memory Technology Device (MTD) support --->
[*] MTD partitioning support
<*> NAND Device Support --->
<*> NAND Flash support for S3C2410/S3C2440 SoC
[ ] S3C2410 NAND Hardware ECC //這個要去掉
6.File systems----->
Miscellaneous filesystems --->
<*>YAFFS2 file system support
7.make zImage
㈧ 嵌入式linux應用程序怎麼測量引腳輸入頻率代碼
嵌入式Linux開發流程
在一個嵌入式系統中使用Linux開發,根據應用需求的不同有不同的配置開發方法,但是一般都要經過如下的過程:
1.建立開發環境
操作系統一般使用RedHat-Linux,版本從7到9都可以,選擇定製安裝或全部安裝,通過網路下載相應的GCC交叉編譯器進行安裝(例如arm-Linux-gcc、arm-μclibc-gcc),或者安裝產品廠家提供的交叉編譯器。
2.配置開發主機
配置MINICOM,一般的參數為波特率為115 200bps,數據位為8位,停止位為1,無奇偶校驗,軟體硬體流控設為無。在Windows下的超級終端的配置也是這樣的。MINICOM軟體的作用是作為調試嵌入式開發板的信息輸出的監視器和鍵盤輸入的工具。配置網路,主要是配置NFS網路文件系統,需要關閉防火牆,簡化嵌入式網路調試環境設置過程。
3.建立引導裝載程序BOOTLOADER
從網路上下載一些公開源代碼的BOOTLOADER,如U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根據自己具體的晶元進行移植修改。有些晶元沒有內置引導裝載程序,例如三星的ARM7、ARM9系列晶元,這樣就需要編寫開發板上Flash的燒寫程序,網路上有免費下載的Windows下通過JTAG並口簡易模擬器燒寫ARM外圍Flash晶元的燒寫程序,也有Linux下的公開源代碼的J-Flash程序。如果不能燒寫自己的開發板,就需要根據自己的具體電路進行源代碼修改。這是系統正常運行的第一步。如果購買了廠家的模擬器當然比較容易燒寫Flash,這對於需要迅速開發自己產品的人來說可以極大地提高開發速度,但是其中的核心技術是無法了解的。
4.下載別人已經移植好的Linux操作系統
如μCLinux、ARM-Linux、PPC-Linux等,如果有專門針對所使用的CPU移植好的Linux操作系統那是再好不過的,下載後再添加自己的特定硬體的驅動程序,進行調試修改,對於帶MMU的CPU可以使用模塊方式調試驅動,對於μCLinux這樣的系統則需編譯進內核進行調試。
5.建立根文件系統
從www.busybox.net下載使用BUSYBOX軟體進行功能裁減,產生一個最基本的根文件系統,再根據自己的應用需要添加其他程序。默認的啟動腳本一般都不會符合應用的需要,所以就要修改根文件系統中的啟動腳本,它的存放位置位於/etc目錄下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自動掛裝文件系統的配置文件/etc/fstab,具體情況會隨系統不同而不同。根文件系統在嵌入式系統中一般設為只讀,需要使用mkcramfs、genromfs等工具產生燒寫映像文件。
6.建立應用程序的Flash磁碟分區
一般使用JFFS2或YAFFS文件系統,這需要在內核中提供這些文件系統的驅動,有的系統使用一個線性Flash(NOR型)512KB~32MB,有的系統使用非線性Flash(NAND型)8~512MB,有的兩個同時使用,需要根據應用規劃Flash的分區方案。
7.開發應用程序
應用程序可以放入根文件系統中,也可以放入YAFFS、JFFS2文件系統中,有的應用不使用根文件系統,直接將應用程序和內核設計在一起,這有點類似於μCOS-II的方式。
8.燒寫內核、根文件系統、應用程序
9.發布產品
㈨ Linux內核載入yaffs時出現的問題
你只是想移植吧,具體的操作如下,可能不是一一一致,但是大概個流程都是這樣,建議你去下載比較高版本的代碼進行移植,因為越高版本我們要下的功夫可能會更少。
1。修改內核源碼根目錄下的Makefile文件
#ARCH ?= arm
#CROSS_COMPILE ?=arm-linux-
2。修改arch/arm/plat-s3c24xx/common-smdk.c文件,修改Nand Flash的分區信息和Nand Flash的硬體信息。這里的分區一定要和你的bootloader的一致,你可以參考smdk_default_nand_part[]這個數據結構的做法。
3。還是2中用到的文件,修改static struct s3c2410_platform_nand smdk_nand_info = {
.tacls = 0,
.twrph0 = 30, //這 三個數字要改的 以前是20 60 20
.twrph1 = 0,
.nr_sets = ARRAY_SIZE(smdk_nand_sets),
.sets = smdk_nand_sets,
};
4。修改drivers/mtd/nand/s3c2410.c中s3c2410_nand_init_chip函數的NAND_ECC_SOFT為NAND_ECC_NONE。
5。晶振頻率:修改arch/arm/mach-s3c2440/mach-smdk2440.c
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
s3c24xx_init_clocks(12000000);//改成和你的一樣
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
6。添加對yaffs2文件系統的支持:
下載yaffs2的源碼包,解壓後進入其中,其加入Linux內核(打補丁的方式)
#cd yaffs2
#./patch-ker.sh c $you_kernel_path(你的內核代碼的目錄)
7。配置內核
先拷貝s3c2410開發板的默認配置到內核根目錄下,以簡化配置過程
# cp arch/arm/configs/s3c2410_defconfig .config
# make menuconfig
1.General setup --->
[*] Configure standard kernel features (for small systems) --->
2. System Type ---->
[*] S3C2410 DMA support [*] Support ARM920T processor
S3C2410 Machines --->
[*] SMDK2410/A9M2410
S3C2440 Machines --->
[*] SMDK2440
[*] SMDK2440 with S3C2440 CPU mole
3.Boot options --->
將 (root=/dev/hda1 ro init=/bin/bash console=ttySAC0) Default kernel command string
改成 (noinitrd root=/dev/mtdblock2 console=ttySAC0,115200 init=/linuxrc )
這里要特別注意root=/dev/mtdblock2 這個參數,mtdblock2是你的根文件系統所在的位置,和你在bootloader的分配有關,當然也和上述2。步驟的密切相關。不行的話多試幾次。
4.[*] Enable loadable mole support --->
[*] Mole unloading
[*] Automatic kernel mole loading
選擇這兩個,剩下的可以去掉
5.Device Drivers --->
<*> Memory Technology Device (MTD) support --->
[*] MTD partitioning support
<*> NAND Device Support --->
<*> NAND Flash support for S3C2410/S3C2440 SoC
[ ] S3C2410 NAND Hardware ECC //這個要去掉
6.File systems----->
Miscellaneous filesystems --->
<*>YAFFS2 file system support
7.make zImage
這個配置是2440和2410都通用的。網上有很多這樣的教程。
另外還有一點要很注意而且也是比較頭疼的:文件系統的製作,這個東西不好你弄,個人建議如果你想進駐嵌入式linux這個行業的話,韋東山的《嵌入式linux應用開發完全手冊》很適合初學者學習,通過本書你會對嵌入式linux開發的整個流程都有個很明朗的認識。
好好學習吧。
㈩ 如何在C51系統上實現YAFFS文件系統
二、配置開發主機,配置MINICOM,一般的參數為波特率115200 Baud/s,數據位8位,停止位為1,9,無奇偶校驗,軟體硬體流控設為無。在Windows下的超級終端的配置也是這樣。MINICOM軟體的作用是作為調試嵌入式開發板的信息輸出的監視器和鍵盤輸入的工具。配置網路主要是配置NFS網路文件系統,需要關閉防火牆,簡化嵌入式網路調試環境設置過程。
三、建立引導裝載程序BOOTLOADER,從網路上下載一些公開源代碼的BOOTLOADER,如U.BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根據具體晶元進行移植修改。有些晶元沒有內置引導裝載程序,比如,三星的ARV17、ARM9系列晶元,這樣就需要編寫開發板上FLASH的燒寫程序,可以在網上下載相應的燒寫程序,也有Linux下的公開源代碼的J-FLASH程序。