小9怎么进进入bootloader模式式

Bootloader下Makefile文件的分析与研究(arm9)
Bootloader下Makefile文件的分析与研究
柯敏毅& 刘文锁
(湖北工业大学,湖北 武汉 430068)
要 在Linux操作系统下,编译调试程序的难度要比在Windows下大很多,而Makefile文件使得这一工作大大简化。本文介绍了Makefile文件的工作原理,并对vivi的Makefile文件进行了分析和研究。
关键词 Makefile;vivi;依赖
一个工程通常有很多的源文件,如果手工对逐个文件进行编译,不但费力耗时,而且由于文件间复杂的依赖关系,这几乎是无法完成的工作。Windows下的程序员似乎意识不到这个问题,因为IDE都自动完成了复杂的编译连接工作。而在Linux系统下,通过编写Makefile文件和执行make命令,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,都可以精确而高效的自动完成。
通过对一个工程的Makefile文件进行分析与研究,可以快速把握工程的组织架构及加速程序开发速度。本文主要对vivi的Makefile文件进行分析与研究。
2& Makefile的工作原理
Makefile的作用就是让编译器知道编译一个文件需要哪些依赖文件,同时当那些依赖文件有了改变,编译器会自动的发现最终的生成文件已经过时,而重新编译相应的模块。Makefile的语法规则如下:
target:dependency_files
&Tab&command
说明如下:
Target:目标文件列表,可以是目标文件(.o文件),也可以是执行文件,还可以是一个标签(Label),如“clean”这样的目标。
Dependency_files:生成目标文件target所依赖的文件,一个目标文件可以依赖一个或多个文件。
Command:make程序执行的动作,可以是任意的shell命令。
示例如下:
init/main.o: init/main.c
&&& $(CC)
$(CFLAGS) $(CFLAGS_KERNEL) $(PROFILING) -c -o $*.o
很明显,init/main.o是目标文件,init/main.c是依赖文件,下面一行命令中应用了Makefile中的变量引用和自动变量,通过执行这行命令编译main.c,生成目标文件main.o。
这就是Makefile的规则,也就是Makefile中最核心的内容。在Linux终端下输入make命令,就会自动执行Makefile文件而完成所有编译任务,并且生成目标程序。Make命令有丰富的命令行选项,可完成各种不同的功能,部分列表如表1所示。
make的命令行选项
读入指定目录下的Makefile
读入当前目录下的file文件作为Makefile
忽略所有的命令执行错误
指定被包含的Makefile所在目录
只打印要执行的命令,但不执行
显示make变量数据库和隐含规则
在执行命令时不显示命令
3& 关于vivi
Bootloader(引导装载器)是用于初始化目标板硬件,给嵌入式操作系统提供板上硬件资源信息,并进一步装载、引导嵌入式操作系统运行的引导程序。vivi是由韩国Mizi公司开发的一种Bootloader,适合于ARM9处理器,支持S3C2410x处理器。本文分析研究所用的vivi源码由FriendlyARM公司提供,版本为0.1.4。
vivi作为Linux系统的启动代码,在编译配置时需要用到函数库,包括交叉编译器库和头文件,交叉编译开关选项设置,还包括Linux内核代码中的库和头文件,所以,经常需要修改vivi工程管理文件Makefile。在vivi工程目录下,有一个主Makefile文件,大多数的子目录中,也有其相应的子Makefile文件。编译前vivi目录下有用的目录包括arch、drivers、
include、 init、 lib和scrīpts,文件包括Makefile 和Rules.make。
vivi的Makefile文件分析
4.1& 主要的变量设置
如果vivi的源代码已根据开发板作了相应改动,则需要重新对源代码进行配置和编译,以生成即将烧入flash的vivi
二进制映象文件。配置编译前,必须要对/vivi/Makefile里的一些变量进行设置。
LINUX_INCLUDE_DIR = /usr/local/arm/2.95.3/include/
交叉编译环境所用库的位置。
CROSS_COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-
&&& Target
tools所在的位置,包括as、ld、gcc、ar、nm、strip、objcopy等命令集,与Host
tools不同的是,每个命令都有个前缀“arm-linux-”。
ARM_GCC_LIBS = /usr/local/arm/2.95.3/lib/gcc-lib/arm-
linux/2.95.3
定义了arm-linux-gcc库的位置。
在主Makefile里还有一些变量需要注意和配置,在此不再一一说明。
4.2& make distclean
进入/vivi目录,在命令行执行make
distclean,这是在正式编译前必须运行的命令,其目的是将vivi目录下所有的不必要文件删掉,从而确保此次编译的有效性。此命令所执行的Makefile中的源码如下:
distclean: clean
$(DISTCLEAN_FILES)
因为clean是distclean的依赖,在执行distclean前会先执行clean,再强制删除变量DISTCLEAN_FILES所指定的文件,包括include/autoconf.h、include/version.h、&&&
scripts/lxdialog/* . o、
scripts/lxdialog/lxdialog等。而伪目标clean完成的任务是:
&&& find .
\( -name '*.o' -o -name core -o -name ".*.flags" \) -type f
&&& | grep
-v lxdialog/ | xargs rm -f
$(CLEAN_FILES)
因为clean不再有其它依赖,所以执行clean时直接依次执行find和rm命令。先在当前目录下查找名字为*.o、core或.*.flags的文件,只要文件名字中不含lxdialog字串,则将此文件删除;最后再删除变量CLEAN_FILES所代表的文件,包括vivi-elf、vivi、vivi.nm和vivi.map。这些文件都是在上一次的编译过程中或最终所生成的文件,所以必须将其删除。
4.3& make config
config的作用就是,根据用户的配置生成两个重要配置文件:.config和arch/autoconf.h。这两个配置文件,在编译链接vivi时起到关键作用。
&&&&&&&&&&&&
&$(CONFIG_SHELL) scripts/Configure
arch/config.in
很明显config没有其它的依赖文件。$(CONFIG_SHELL)就是系统的shell,一般为/bin/sh;执行的是“scrīpts/
Configure”程序,输入参数为“arch/config.in”。 config.in包含了可配置的所有选项。
scrīpts/Configure中函数实现主要有choice、bool、int,用于实现选项的赋值,也就是给CONFIG_的宏赋值;此外还有readln、dep_bool等函数。在scrīpts/Configure中,执行config.in脚本,实际上就是按一定顺序执行这些函数和命令,进而生成两个配置文件.config和arch/autoconf.h。
&vivi的image文件的生成
所有工作的目标就是得到vivi的image文件,vivi的依赖文件如下:
&&& vivi:
include/version.h $(CONFIGURATION) init/main.o init/version.o
linuxsubdirs
可见vivi的生成要依赖五个文件。第一个依赖include/version.h,比较简单,其生成规则在Makefile中已经明确给出。依赖$(CONFIGURATION)就是要保证.config配置文件必须存在,否则make命令就变成了make
config命令。由Rules.make文件里定义的Makefile的一些通用规则可知依赖init/main.o和init/version.o又分别依赖于init/main.c和
init/version.c,并有确定的编译规则,描述如下:
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$@) -c -o $@
最后一个依赖是linuxsubdirs,其依赖关系如下:
linuxsubdirs: $(patsubst %,_dir_%,$(SUBDIRS))
$(patsubst %,_dir_%,$(SUBDIRS)): include/version.h
$(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" -C $(patsubst
_dir_%,%,$@)
其中,SUBDIRS = drivers
lib。在vivi目录的drivers和lib子目录下,都有各自的子Makefile文件。上面的命令就是分别执行drivers和lib子目录下的Makefile。这里用到了Makefile中的替代函数patsubst,应用在此处的作用就是避免存在相同名字的目标名和文件名而产生混淆。
目标文件vivi的五个依赖文件已经分析完毕。在命令行下输入make命令,如果不报错,在/vivi目录下就可生成vivi的image文件了,也就是将要烧写到flash中的bootloader。
本文主要对vivi工程的主Makefile文件进行了配置、分析和研究,此BootLoader经编译连接后,可成功烧写到FriendlyARM生产的S3C2410板上运行。通过对Makefile文件的分析研究,对Linux下的程序执行特点以及linux操作系统的灵活性和开放性有了更深的理解,并对以后进行大型项目的开发奠定了基础。
张晓林,崔迎炜编著.嵌入式系统设计与实践[M].北京:北京航空航天大学出版社,2006
孙纪坤,张小全编著.嵌入式Linux系统开发技术详解—基于ARM[M]. 北京:人民邮电出版社,2006
罗苑棠,杨宗德编著.嵌入式Linux应用系统开发实例精讲[M]. 北京:电子工业出版社,2007
NeilMatthew.RichardStones.Linux程序设计[M].北京:机械工业出版社.2002
收稿日期:8月7日&&&&
修改日期:8月8日
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。1 Pages: 1/2& & &Go
主题 : 请问该如何真正的学会bootloader移植呢?
级别: 新手上路
金钱: 95 两
威望: 19 点
贡献值: 0 点
综合积分: 38 分
&请问该如何真正的学会bootloader移植呢?
请教大虾,小牛,大牛:&&&&吾乃一只小菜鸟,先看在学mini2440的裸机,现在正在看bootloader,移植了一周了也没个头绪,就按着网上的步骤,复制粘贴,即便是复制粘贴,遇到要从nand flash启动也搞不定了,请问大大们,这个bootloader里面文件这么多,到底该如何才能真正学会移植,做到自己去移植呢?
自由,自强,共享,共创。
级别: 论坛版主
发帖: 8881
金钱: 46490 两
威望: 9298 点
贡献值: 27 点
综合积分: 18302 分
初学者暂时不宜从bootloader看起
新手如何向我们反馈有效的信息,以便解决问题,见此贴: [注]: 此处签名链接仅为指引方向,而非解答问题本身.
级别: 新手上路
金钱: 95 两
威望: 19 点
贡献值: 0 点
综合积分: 38 分
那从哪里看起呢,裸机我看了,arm体系结构也看了,搭建linux平台的东西也了解了些。
级别: 新手上路
金钱: 70 两
威望: 14 点
贡献值: 0 点
综合积分: 28 分
装逼,不从bootload看起,从哪里看起?linux移植??linux内核??linux驱动??看不懂是真的看不懂还是没有静下心来看,一遍看不懂,就两边遍..,有高手带着,会少走很多弯路
不管嵌入式之路再难走,既然决定了,就要毅然地走下去!
级别: 新手上路
金钱: 100 两
威望: 20 点
贡献值: 0 点
综合积分: 40 分
3楼所言极是,心急真的吃不了热豆腐
级别: 新手上路
金钱: 160 两
威望: 32 点
贡献值: 0 点
综合积分: 64 分
一定要看uboot的源程序才能知道它的功能,这一步定要过的,还有建议你去看韦东山写的(嵌入式linux应用开发完全手册)这本书写的非常好,对你移植uboot有帮助
级别: 新手上路
金钱: 20 两
威望: 4 点
贡献值: 0 点
综合积分: 8 分
我同意5楼的意见
级别: 侠客
金钱: 305 两
威望: 61 点
贡献值: 0 点
综合积分: 122 分
学习了,谢谢。
除了自己仅有的那点判断力&&我想我再无丝毫的依靠了
级别: 新手上路
金钱: 45 两
威望: 9 点
贡献值: 0 点
综合积分: 18 分
级别: 侠客
金钱: 315 两
威望: 63 点
贡献值: 2 点
综合积分: 126 分
引用第5楼hps311于 22:22发表的&&:一定要看uboot的源程序才能知道它的功能,这一步定要过的,还有建议你去看韦东山写的(嵌入式linux应用开发完全手册)这本书写的非常好,对你移植uboot有帮助thanks!
1 Pages: 1/2& & &Go
Powered by查看: 40082|回复: 52
[1106更新]Nexus 6p/5x/6/5/7/9/10通用解锁安卓6.0/5.x bootloader教程
本文最后更新于!
那些已经拿到pixel/pixel xl,Nexus 5x/6p的同学,第二件事估计就是bootloader解锁了吧,因为解锁是我们刷机和root的第一步,我们nexus中文网首发Nexus 5x/6p以及所有nexus设备的通用解锁教程,给你们助力~!本教程同样适用于nexus 4/7/10,而对于pixel/pixel xl,nexus 6/6p/5x和nexus 9 来说,就是多一个开启oem解锁的过程,同时对于pixel,pixel xl,nexus 5x和nexus 6p来说可能还需要用了fastboot flashing unlock这个新命令,具体的关于pixel,pixel xl,nexus 6p/6/5x/9的解锁教程见:
这里再重申一下关于手机解锁的说明:
好处:如果你的手机解锁了,可以刷第三方的recovery的,可以刷论坛上提供的各种rom刷机包,刷自己喜欢的刷机包。另外也只有先解锁才能Root。
坏处:如果你的手机解锁了,要是有问题,是不可以保修的,如果要保修的话,自己还得刷回官方的版本,然后恢复到锁定状态。
所以你确定要这么做了吗?
*首先解决adb和fastboot驱动问题,见:。
1。进入设置-&关于手机-&版本号,点击5或6次'版本号'就能启动“开发者选项”
2。进入开发者选项,勾选USB调试的复选框,确定选择“一律允许此计算机进行调试”
3。连接你的手机到电脑。
4。你需要给它USB调试访问(别忘了检查框)。
5。一旦你已经给你的电脑调试访问,这是时间的命令。输入一个命令提示符:adb reboot bootloader
6。等待bootloader界面在屏幕上出现。如上图: fastboot oem unlock(注意如果您是nexus 5x/6/6p/9的话,需要先在开发者选项里开启oem解锁)
7。一个unlock bootloader的选择确认页面会出现。用音量来选择到“YES,”,用电源键来确定。
8。这时你手机上的所有数据都将被抹去,LOCK STATE将变成unlocked。不应该超过一两分钟。
9。好了就此你的bootloader(引导装载程序)现在已经解锁,然后你可以root或者刷ROM又准备根、rom、恢复等。
恭喜你大功告成,并由此走上刷机这条不归路XD
10。 你应该看到屏幕上显示“START“用电源键选择并让手机重启。
11。 在重新启动后,你的手机将完成出厂设置(也就是数据全部清空,所以建议可以上来就解锁或做好重要数据备份)。
12。 好了,重新开机后的画面下面出现了一个打开的锁,以后刷机都会在解锁状态下了;
欢迎各位nexus中文网的粉丝投稿各类原创教程,经过审核后优秀的一定会被推荐到网站首页和基于一定奖励的哦~!
本帖子中包含更多资源
才可以下载或查看,没有帐号?
求救,不出现unlock bootloader的选择确认页面,只有一个红色的Restart bootlader.解锁不成功,怎么搞啊大 ...
哎,该教程很多漏洞,进入BL界面后,需要再输入一个命令:fastboot oem unlock,这样才会出现那个界面
求救,不出现unlock bootloader的选择确认页面,只有一个红色的Restart bootlader.解锁不成功,怎么搞啊大神
谁给保修呢?
这个必须收藏了 回来第一件事就是解锁 然后再干其他的 呵呵
谁给保修呢?
呵呵,谁卖谁负责咯
中文网???
祝贺祝贺!再观望一下,时机合理再入手
vaniahou: 这个必须收藏了 回来第一件事就是解锁 然后再干其他的 呵呵
拿回来第一件事明明是看着N5流口水,然后流眼泪,呵呵
小编辛苦了,但是越来越不像给安卓设备解锁了。感觉不解锁可玩性也很强。
感谢分享,收藏备用!
还能回锁那必然要解锁哈~~~
是为全球所有华人google迷提供交流最新,,,,,,谷歌,安卓资讯,业界科技信息,使用和玩机技巧的科技资讯社交媒体网站
Powered by
nexus中文网QQ群(只加注册用户):(主力群), 8269925,moto x粉丝群1299655}

我要回帖

更多关于 bootloader模式进不去 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信