当前位置:首页 » 操作系统 » yaffs源码

yaffs源码

发布时间: 2022-07-01 08:38:40

㈠ 如何制作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。


嵌入式系统对文件系统的要求

  1. 要求文件系统在频繁的文件操作(例如,新建,删除,截断)下能够保持较高的读写性能,要求低碎片化。

  2. 日志文件系统(XFS,ReiserFS,Ext3等)能保持数据的完整性,但消耗过多系统资源的弱点使之不能成为嵌入式系统中的主流应用。并且这些都是专门为硬盘这类的存储设备优化,对于flash这类的存储介质并不适用。

  3. 嵌入式文件系统的载体是以Flash为主的存储介质,Flash的擦除次数是有限的,所以为了延长Flash的使用寿命,应该尽量减少对Flash的写入操作。

  4. 嵌入式文件系统的载体是以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程序。

热点内容
电脑服务器滑轨故障如何取下 发布:2024-11-17 01:21:10 浏览:288
另我空间安卓什么时候出 发布:2024-11-17 01:13:57 浏览:581
王者苹果账号怎么转安卓花钱吗 发布:2024-11-17 01:08:16 浏览:449
脏小豆解说我的世界服务器女武神 发布:2024-11-17 01:02:58 浏览:679
linux编译arm 发布:2024-11-17 01:02:16 浏览:27
ftp服务器映射 发布:2024-11-17 01:01:26 浏览:990
emcvnx5700系统存储 发布:2024-11-17 00:57:27 浏览:350
容器安装ftp客户端 发布:2024-11-17 00:48:00 浏览:75
oppoa33存储设置方法 发布:2024-11-17 00:41:54 浏览:390
sql的if函数怎么用 发布:2024-11-17 00:36:52 浏览:238