嵌入式Linux系列第5篇:Nand Flash根文件系统制作
1.引言
之前系列的文章介绍了如何编译Uboot、Kernel以及使用默认的ramdisk根文件系统来构建一个完整的嵌入式Linux系统,本篇文章介绍如何从头制作一个放在NAND Flash上的根文件系统。经过我这段时间的总结,rootfs相关的编译、配置等工作还是比较麻烦的。所以你可能会看到一般做核心板的第三方厂家会建议初学者直接使用现成提供的文件系统,比如一个做NUC972核心板的厂家,其文档里这么描述:
再比如另外一个做NXP I.MX6核心板的厂家,其文档里这么描述:
他们都建议初学者直接使用他们提供好的文件系统。但是我还是强烈建议大家自己一步一步的去操作制作一次,因为一是这有助于你理解根文件系统是怎么来的,最小的能用的根文件系统包含了哪些东西,二是将来你很有可能需要对文件系统做一些定制化的裁剪和修改工作,只有自己做了一遍你对会明白这个东西到底是怎么回事,比如我原来就搞不清楚Busybox、Buildroot、Yocto这些名词在Linux中的作用,现在随着实践增多,就大概知道他们的用处了。
2.环境介绍
2.1.硬件
因为本系列博客都会以NUC972为平台来介绍。
2.2.软件
本篇新用到的软件工具一个是busybox,它用来生成文件系统里的几个最基本的文件夹,二是打包工具mkyaffs2,它用来生成能直接烧录到板子里的镜像文件。
大家有没有注意,我为什么每次都把这个官方的链接放过来,让大家自己去下载,原因是我们要知道我们用的东西的源头在哪里,最官方的资料渠道在哪里,这很重要。
我们这次要实现的目标是:自己亲手制作的文件系统能够跑起来,同时能够运行我们第二篇文章介绍的Helloworld程序。
3.使用Busybox制作根文件系统
1)进入到nuc972文件夹,新建一个tool文件夹,用来存放busybox、mkyaffs2等工具,把上面下载的NUC970_Linux_Applications-master.zip文件解压到tool文件夹里,因为解压后含有NUC970_Linux_Applications-master,我们把里面的内容移出来,然后删除掉空的NUC970_Linux_Applications-master文件夹和NUC970_Linux_Applications-master.zip源文件。然后进入到busybox目录里。同样的,在编译前要设置交叉编译的环境变量。
cd ~/nuc972
mkdir tool
unzip NUC970_Linux_Applications-master.zip
cd NUC970_Linux_Applications-master
mv ./* ../
cd ..
rm NUC970_Linux_Applications-master -fr
rm NUC970_Linux_Applications-master.zip
cd busybox-1.22.1/
source ~/nuc972//toolchain/environment.sh
2)make menuconfig 进入配置界面
make menuconfig
我们这里就设置一个地方,其他的全部使用默认配置。
修改make install生成的文件夹路径,我们把默认的./_install改成nuc972目录下的rootfs。
Busybox Settings --->
Installation Options ("make install" behavior) --->
(../../rootfs) BusyBox installation prefix
3)make 编译
make
编译成功后显示如下:
编译完成之后我们可以查看一下busybox的文件属性,可以看到如下信息,说明我们交叉编译的没问题。
4)make install 安装
make install
这样就在前面我们设置的地方生成一个rootfs的文件夹,进到里面看一下
cd ~/nuc972/rootfs
ls
bin、sbin、usr :存放一些命令
linuxrc :挂载根文件系统时,第一个执行的文件
4)再创建几个文件夹
mkdir etc lib dev
5)在 rootfs 目录的dev目录下创建设备节点
cd dev
sudo mknod console c 5 1
sudo mknod null c 1 3
6)在根文件系统rootfs/etc目录下创建一个inittab 文件,在文件里面填写:.console::askfirst:-/bin/sh
cd ../etc
vim inittab
4.文件系统打包
1)进入到tool文件夹的yaffs2utils目录里
cd yaffs2utils
2)编译,生成mkyaffs2
make clean
make
注:编译这个工具,不需要修改Makefile,用file看下属性,它是在x86-64运行的,这是没问题的,因为它就是在Ubuntu下使用的,不是在嵌入式环境下去执行使用的。
将它复制到/usr/bin下以后用起来方便了,可以直接使用这个指令了,你可一在终端敲mkya,然后TAB建看不能出来。
sudo cp mkyaffs2 /usr/bin/
4) 生成文件系统
sudo mkyaffs2 --inband-tags -p 2048 rootfs rootfs_yaffs2.img
5.内核修改
内核也要做一定的修改,具体如下:
1)make menuconfig进入到内核配置界面
make menuconfig
2)默认用的RAM filesytem 需要去掉
General setup —>
[ ] Initial RAM filesystem and RAM disk (initramfs/initrd) support
3)默认的Boot option需要修改成如下:
Boot options --->
(noinitrd root=/dev/mtdblock2 rootfstype=yaffs2 rootflags=inband-tags console=ttyS0,115200n8 rdinit=/sbin/init mem=64M)
4)NAND Flash驱动相关配置
Device Drivers --->
Generic Driver Options --->
<*> Nuvoton NUC970 FMI function selection
Select FMI device to support (Support MTD NAND Flash) --->
5)选中MTD的支持
Device Drivers --->
<*> Memory Technology Device (MTD) support --->
<*> Caching block device access to MTD devices
-*- NAND Device Support --->
-*- Nuvoton NUC970 MTD NAND --->
NUC970 NAND Flash pin selection (Port C) --->
6)选中yaff2文件系统的支持
File systems --->
[*] Miscellaneous filesystems --->
<*> yaffs2 file system support
7)保存配置,编译
6.结果查看
6.1.验证文件系统是否可用
1)将上述生成的kernel 970uimage、文件系统rootfs_yaffs2.img、还有之前第三讲生成的uboot.bin,uboot-spl.bin,以及env.txt 下载到板子里,env.txt做了一些改动,主要是加入了boocmd那一行,这样下载进去就能直接启动了。
baudrate=115200
bootcmd=nboot 0x7fc0 0 0x200000; bootm 0x7fc0
bootdelay=1
ethact=emac
ethaddr=00:00:00:11:66:88
stderr=serial
stdin=serial
stdout=serial
烧写前,最好对芯片进行一次Erase。几个文件的烧写类型及地址大家注意下,别搞错了。
2)上电,看看效果,调试串口打印信息如下:
这一次很顺利啊,一次就成功了,这就说明我们上述做的根文件系统是可以正常使用的了。
6.2.验证helloworld能否在板子上运行
我们还要看看我们之前编译的helloworld程序能不能运行,我们把helloworld放到板子里去,怎么把这个文件放到板子上呢?有以下几种方式:
a) 把Helloworld在Ubuntu下放到rootfs文件夹里,然后按照上述的方法打包、下载进去。
b)通过scp或者NFS服务,直接通过网口放到板子里
c) 先放到U盘里,然后U盘插入到板子上,再复制过去
方法a)自然没问题,不过有些麻烦,方法b)现阶段我们的文件系统并不支持,暂时先不弄了,下一篇文章会介绍scp的移植,我们来试试方法c)吧
1)插入U盘到电脑上,把helloworld拷贝过去
2)把U盘插入到板子上,这时调试串口会自动输出如下信息,提示我们有USB Mass Storage设备接入了,看来内核已经把USB这部门驱动已经做进去了。这不是有点像我们给PC机重装Windows系统的过程,默认鼠标键盘也是可以直接使用的。
我们进入到/dev目录里,可以看到有sda1设备,LINUX所有的存储设备都是映射成"文件"来访问的,包括U盘、光驱、硬盘等。这个sda1就对应我们刚插入的U盘。
那么该如何访问U盘的东西呢?
我们需要挂载,使用mount指令,我们执行以下命令:
mkdir mnt
cd mnt
mkdir usb
cd usb
mount -t vfat /dev/sda1 /mnt/usb
cd /
mkdir opt
cp /mnt/usb/helloworld /opt
完成的事情是把sda1挂载到了/mnt/usb目录上,这样/mt/usb目录里就有了U盘里的内容,然后再复制到了系统的/opt目录。
我们在/opt目录里执行./helloworld,提示如下错误:
-/bin/sh: ./helloworld: not found
这是怎么回事呢?原因很简单,helloworld的执行是需要依赖一些库的,不可能系统里什么都没有就执行能执行成功了。所以需要我们把交叉编译链~/nuc972/toolchain/arm-2014.05/arm-none-linux-gnueabi/libc/lib里的库文件复制到板子的lib目录里。
可以先到arm-2014.05/arm-none-linux-gnueabi/libc/lib目录中,压缩下
tar -cvf lib.bin *
然后通过U盘放到板子的/lib目录中解压
tar -xvf lib.bin
这样操作之后,再次执行helloword,结果如下:
另外可以对板子断电-再上电,看看我们之前操作的内容都还在,因为它是存到NAND Flash里的,所以断电是不丢失的。
7.结束语
如果你亲自动手实现了这篇文章介绍的所有内容,相信你对根文件系统一定有了一个非常感官的认识。包括这篇在内,我用了5篇文章一直在介绍嵌入式Linux基础环境相关的内容,你应该也能感受到这和我们以前接触的单片机开发还是有着较大的差异。从下一篇文章开始,我们就正式进入到具体的应用了。我会陆续介绍GPIO、UART使用;网络通信;WIFI使用;摄像头采集数据;EC20 4G模块使用;QT编程;Opencv使用等。
紫光与英特尔一纸2年采购密约曝光,掀开千亿存储帝国的野心全貌
一触即发的中美贸易大战,在今天似乎出现了一线转机 ,包括CNBC、《华尔街日报》等美国媒体都报道,特朗普政府放出消息希望中国增加采购美国产的汽车与半导体产品,借此减少中美之间的贸易逆差金额。虽然此一消息并未获得任何一方的证实回应,但美股周一收盘全面大涨,其中道琼指数大涨669点,涨幅2.84%,而以科技股为主的纳斯达克指数涨幅则是更胜一筹,终场上涨227点,涨幅达到3.26%。市场多认为,美股大涨是受到媒体报道中国考虑从美国购买更多半导体的消息所影响。
图丨纳斯达克呈现上涨之势
上周特朗普突然其来的点燃中美贸易战引线的动作,固然引发市场震撼,但必须注意的是,中美双方的谈判其实早已进行很长一段时间,两者之间的相互试探底线、角力拉扯,是谈判必然的历程,不论是中国或美国都不会在毫无准备的情况下展开谈判。
以中美之间的贸易清单来看,半导体显然在其中扮演非常关键的角色, 不只是因为中国高度依赖自美进口半导体芯片产品与相关设备,更因为,美国多家半导体大厂对中国市场的依赖度已经大到无法脱身。
根据美国CBS报道包括高通(Qualcomm)、美光(Micron)对中国市场依赖度都超过50%、 德州仪器(TI)则也超过40%,至于包括赛灵思(Xilinx)、英特尔(Intel)等大厂对中国市场的依赖程度也超过20%水平。
图丨高通近年全球营收中,中国市场占了一半以上
而或许正是因为如此,与其提出其他的贸易谈判条件,此时传出中国考虑增加对美采购半导体消息,之所以会如此受到瞩目、并立即带动股市大涨,就是因为,半导体采购这个选项,正是美国最想要的谈判结果。
但身为全球最大半导体芯片市场、同时也是全球芯片采购金额最大国,中国每年进口芯片金额超过2,000亿美元, 为了不再受制于人,从政府到企业打造自有半导体霸业的企图心不但强烈、而且迅猛。
而高度依赖进口的存储芯片产业,长期受制于人的状态,无疑中国半导体产业的心头上最难受的那根刺,欲除之而后快,也因此,过去几年中国存储芯片产业的投资力道之猛,也是外界有目共睹。
图丨打造“中国芯”
在此其中,紫光集团打造千亿存储帝国的万丈雄心,从武汉、南京相继建立新12寸厂的动作格外引人瞩目,正当所有人期待紫光长江存储宣布成功研发国内第一颗32层3D NAND芯片、等待量产的消息时,紫光存储迅雷不及掩耳的宣布一系列自主品牌的闪存产品问世,着实让所有人都惊呆了。
而这背后,隐藏的是紫光与英特尔一纸2年密约的内幕。
紫光左手研发3D NAND技术,右手采购芯片提前布局品牌渠道
根据供应链透露,2017年紫光旗下的长江存储在埋首3D NAND技术开发同时,也同步和英特尔谈成了一纸采购密约,计划在2018、2019年两年期间,紫光将向英特尔采购 3D NAND芯片,以英特尔大连12寸厂生产的产品为优先。
这纸合约背后象征的意义是,紫光从芯到云的千亿存储帝国布局,已经提前启动,而不会等几年后长江存储的单月十万片产能都开出后才慢慢规划。紫光不只是投入3D NAND核心技术开发,更在终端市场上,提供UFS、eMMC、SSD等产品,打造中国最大的闪存产品供应商。
业界曾开玩笑指出,紫光自己也研发3D NAND技术,却跟英特尔采购,不会是要把英特尔的3D NAND芯片当成是自己的研发成果吧?
以上当然是玩笑话,因为多数人对于商业布局的思考速度,可能还跟不上灵活的紫光。事实上,紫光向英特尔采购3D NAND不但可提前布局渠道,更可增加集团营收,何乐而不为呢!
这纸合约落地后,紫光也启动一系列配套,以最常用的合资手法,与台湾SSD供应商光宝集团成立合资企业,进行SSD产品的生产制造。光宝在2017年9月以4,500万美元成立苏州光建存储,同年12月苏州紫光存储办理增资引进紫光,目前该公司的持股中,苏州紫光持股55%,光宝持股45%。
迅雷不及掩耳地,紫光存储在2018年3月初,就宣布一系列五大闪存产品线问世, 包括eMMC系列、UFS系列、企业级SATA SSD、企业级PCIe SSD,以及消费型P5120 PCIe SSD。
紫光打造一系列闪存产品 要当中国闪存最大制造商
紫光一路以来自制NAND Flash芯片、生产eMMC/UFS/企业级SSD等终端产品,就连当中关键的NAND Flash控制器,紫光也有属于自己的一套战略守则,采取自制IC和对外采购两套剧本同步进行。
紫光的闪存产品中,外购的NAND Flash控制器来自两大供应商,分别为慧荣(SMI)和群联,这两家也是全球除了三星、SK海力士等NAND Flash芯片大厂之外,最主要的两家独立型NAND Flash控制器供应商。
紫光自制的NAND Flash控制器技术,是来自于并购SSD控制器公司得瑞领新(Dera), 这是一家成立于2015年的新兵,技术团队来自于华为、SST等,成立不到几年,该公司已经火速被紫光收购,成为自制SSD控制器的内部团队。
图丨SSD控制器公司得瑞领新(Dera)
紫光三月初亮相的五大闪存产品中,第一款嵌入式eMMC系列是锁定中高端的手机和平板计算机领域,集成了新一代3D NAND TLC技术, 同时兼具效能、可靠度和成本,涵盖32GB、64GB、128GB等应用领域。
第二款UFS系列是国产品牌中第一个UFS系列的闪存产品,锁定高端旗舰型智能手机和高端平板计算机,提供SSD等级的效能、可靠度,而同时也兼顾便携式产品最在意的低功耗需求,可支持64GB、128GB、256GB等大容量应用。
再者,在SSD产品在线,紫光的策略很显然是着重于数据中心、服务器市场的企业级SSD领域。
推出的两款企业级SSD分别为S6110 SATA SSD和P8130 PCIe SSD,前者是面向基础设施和低成本数据中心升级的需求,后者是锁定高端数据中心和云计算中心领域,全面支持NVMe1.2,较特别的是,该产品是采用紫光自己研发的NAND Flash控制器。
再者是消费型P5120 PCIe SSD,应用在笔记本电计算机,采用M.2封装形式,辅以高纠错能力算法(LDPC)技术,让其中的3D NAND TLC的使用寿命更长,诉求是高性价比。
图丨紫光集团董事长赵伟国
业界分析,紫光的策略要打造从芯片技术,到所有终端产品都一条龙掌握的存储帝国, 这次向英特尔采购3D NAND芯片、布局终端市场,一来是与英特尔战略布局伙伴的思维做考量,二来是紫光亟欲赶快打开渠道市场的任督二脉。
建立品牌、经营渠道是需求时间的积累,紫光不可能等到几年后长江存储的芯片可以大量生产时,才开始耕耘渠道市场。芯片的研发需要时间,但渠道布局可以提前启动,上、下游策略可以独立思考,等到时机成熟再把耕耘的成果做连贯,落实上、中、下游自研、自制、自销的一条龙策略。
英特尔、美光分道扬镳,紫光见缝插针抢到位子
紫光依靠向采购英特尔的3D NAND芯片来提前进入品牌渠道市场,可以先累积品牌的知名度,打开渠道端的任督二脉。再者,紫光与英特尔在3D NAND领域的另类合作,是先培养感情,等待未来技术合作,无论是授权或生产制造等契机,这样推测也十分合理。
英特尔在3D NAND技术的开发上一直是与美光联手,但年初双方宣布散伙,因此未来在3D NAND策略上,英特尔和美光势必各自寻找合作伙伴。
紫光与英特尔关系深厚,且英特尔2015年起将大连12寸晶圆厂从生产处理器芯片改装成3D NAND生产线,搭上中国消费性电子需求蓬勃发展的热潮,业界自然将紫光配对成英特尔在3D NAND领域的新合作伙伴。
然短期内,基于政治因素考量,美国总统特朗普要同意英特尔将核心的3D NAND技术转移给中国企业生产,是有些难度的,特朗普多次阻止中国并购欧美企业,立场已经很明显,何况3D NAND是核心技术。
业界分析,短期内双方要谈到技术授权层次,阻碍会较高,但其他战略上的合作仍是可以进行,例如这次英特尔和紫光的采购合约,就是一例,紫光凭借此合约先练习渠道市场,英特尔也借着紫光的势力打开中国市场,可为合则两利。
不只是与英特尔合作密切,紫光与西部数据WD虽然谈并购不成,但双方也合资了一家公司叫做紫光西部数据有限公司, 而这家合资公司的主要业务是推动大数据存储的生态系统。
可以窥见紫光的行事风格是广阔交友,买卖不成仁义在,虽然与多家国际大厂谈技术授权、并购等都未能成交,但彼此仍是以各种方式维持合作关系,作为未来合作更上一层楼的火苗。
国际并购频碰壁,转向再攻另辟新路
紫光在进军存储产业的初期,其实是想要走海外收购之路。 2015年曾提出以230亿美元收购美光,一次解决DRAM及NAND Flash技术和专利问题,然美光婉拒,业界认为即使同意,美国政府也不会放行美国仅存的DRAM公司被中国企业收购。之后,紫光试图并购西部数据(WD)也未成功,即使是日本存储大厂东芝NAND Flash部门的出售案,也先排除中国企业,对于中国自建存储产业来掌握核心技术的计划是十分忌惮。
海外并购之路在欧美日力阻之下是暂时喊停,但不可否认,这是一条最快也是最安全的捷径。所谓安全是指,在正规并购后,可以合法使用DRAM和NAND Flash专利,免于触及潜在的侵权问题。
既然并购不成,与国际大厂保持合作关系,不啻是一条灵活的策略,而紫光在布局芯片领域上的好伙伴,当属英特尔了。紫光和英特尔一直以来就合作密切,在紫光集团先后收购了展讯、RDA瑞迪科两家公司成立紫光展锐公司后,英特尔也在2014年投入15亿美元入股紫光展锐。
紫光抢先执行增加对美芯片采购 赵伟国堪称神机妙算
而日前中美贸易大战一触即发的态势,无疑是在全球半导体产业抛出一枚深水炸弹。
如多家媒体所报道的内容,传闻中国大陆为了降低对美贸易顺差,向美提议扩大采购美国半导体 ,同时减购韩国、台湾制造的芯片,该策略隐含许多政治角力计算,但对照紫光集团在帮中国打造关键存储器基地的同时,也先一步与英特尔结盟,更大手笔采购3D NAND芯片,紫光董事长赵伟国的“神机妙算”确实让外界印象深刻。
图丨西部数据3D NAND
紫光在存储领域上的发展策略,是中国集成电路产业发展的最典型案例,采自主研发与技术授权/并购两只腿走路,条条路都尝试,观念开放、策略灵活、布局缜密,未来自可请君入瓮。
紫光集团旗下的长江存储投入10多亿美元,研发3D NAND芯片技术将近两年, 按照进度,在2017年底成功研发32层3D NAND芯片技术,下一步是再投入20亿美元量产64层3D NAND技术,缩短与国际大厂三星、东芝、SK海力士之间的差距。
尽管紫光的存储芯片研发已经是中国三大存储阵营中,进度最快的一支,然以这个节奏仍是不够,要技术研发、芯片试产、量产开出都条件逐一到位,确实是稳扎稳打,但如果可以缩短成功之路,当然是再美妙不过。而选择延续过去与英特尔的缘份,进而在存储领域与英特尔结盟,这对于紫光而言,无疑是一着极为漂亮的出手。
赵伟国一开始搞集成电路产业或许图得是周边利益,但越搞越大后,到现在已然是被迫要扛下中国存储产业成败的重责大任,对紫光集团或赵伟国而言,现在必须有没有回头路的决心,一定会努力作、用力干,干出成绩来,毕竟紫光、赵伟国这些关键字已经和中国集成电路产业画上某种等号了!
综观紫光投入存储领域已有三年多,大手笔的投资、战线更拉很长,当仁不让要做中国存储领头羊。几年前紫光董事长赵伟国的非典型高调作风在业界留下不同评价,虽然现在检视成绩单还太早,但紫光在存储领域布局的绵密、细腻程度,背后强大的企图心已然不容忽视。
相关问答
3d nand flash 制作工艺流程?具体步骤有:第一步:手绘动画图形结构。根据预先创意的图形概念,手绘出适合的图形结构,这是三维动画制作最基础的部分。第二步:3D角色模型。根据概念设计以...
flash 怎么制作? - 懂得要制作flash,需要使用AdobeFlash软件。以下是制作flash的基本步骤:1.设计故事板:在AdobeFlash中打开新文档,创建故事板(Stage)并定义尺寸和帧速率。...
如何制作简单的 FLASH ,就是3张图片轮流播放的 FLASH ?将三张图片分别转换为图形元件。4、新建一个影片剪辑元件,将三张图片的图形元件分别托入到该影片剪辑元件的三个图层中,在第10帧、60帧、70帧和80帧处分...
如何自己制作一个 Flash 动画?如何自己制作一个Flash动画?当然卡通动画软件很多,今天我就说一个我教学生用flash动画软件,制作一个小车动画,动画虽简单,但也包含了不少基础原理,流程及...如...
怎么制作 flash 动画? - 懂得要制作Flash动画,您需要AdobeFlash软件(现已改名为AdobeAnimate)。以下是制作Flash动画的基本步骤:1.准备故事板(Storyboard):在纸上画出您的故事板...
Flash 怎么做斗罗大陆魂环?以下是使用Flash制作斗罗大陆魂环的简要步骤:1.创建魂环:使用椭圆工具和矩形工具创建魂环。2.添加颜色:为魂环添加颜色。3.添加文本:在魂环上添加文本,...
谁能告诉我存储器dataflash norflash nandflash EEPROM这些的区别啊?norflash,nandflash,EEPROM都是些非易失性存储器,它们都是基于悬浮栅晶体管结构,但具体实现工艺上有差异。EEPROM:(ElectricallyErasableProgra...
flash 课件制作教程?2、然后用选择工具调整文字的位置。3、在这里我们需要两个按钮,一个用来设置跳转到下一页,一个用来设置跳转到上一页,为了方便,我们从flash的公用库里面调...3...
如何用 Flash 8.0制作一个翅膀煽动并且飞翔的小鸟?求具体步骤,谢谢?是这样的,制作一个翅膀煽动的小鸟,你得制作小鸟的几个不同形态的关键帧,并把这个具有不同小鸟形态的帧放在一个影片剪辑中,然后把这个剪辑放在舞台上并用补间...
如何用 flash 制作简单动画效果?1、打开flash软件。2、选择新建一个flash文档。3、将舞台改为黑色。4、在舞台上利用矩形工具画出一条白色车道。5、将小车的素材拖入库中。6、在地图35帧的...