MT7620 Uboot编译以及Image文件生成

合集下载

linux的几个内核镜像格式Image和u-boot启动内核和文件系统时的一些环境变量的设置

linux的几个内核镜像格式Image和u-boot启动内核和文件系统时的一些环境变量的设置

linux的几个内核镜像格式Image和u-boot启动内核和文件系统时的一些环境变量的设置关于编译powerpc linux的几个Image参考原文 /s/blog_86a30b0c0100wfzt.html转载▼PowerPC架构 Linux和ARM,X86等平台有些差异,PowerPC平台HW参数不是通过命令行方式传递到Linux,而是通过传递Device tree文件的方式传递参数,所以PowerPC平台Linux需要编译dtb和uImage才能正常加载,另外PowerPC架构linux还提供simpleImage的方式加载,也就是将dtb与uImage或将dtb,uImage 与ramdisk.image.gz多个文件整合生产单个simpleImage文件,这种simpleImage文件加载方式适合于没有bootloader支持的情况下,通过JTAG将simpleImage直接加载到target board内存中运行,对于调试非常方便,下面说说这几种Image文件的编译:1,dtb:dtb文件由dts生成,对于任何一个PowerPC处理器板,都要有对应的dts文件,dts文件主要是对目标板的HW参数进行描述,比如我的目标板是evm440(Powerpc440),我编写了一个evm440.dts文件放到内核arch/powerpc/boot/dts/目录下.编译evm440.dtb文件命令如下:$ make ARCH=powerpc CROSS_COMPILE=/toolchain/freescale-2010.09/bin/powerpc-linux-gnu- evm440.dtb编译成功后会在arch/powerpc/boot/下生成evm440.dtb文件,这就是我们需要的dtb文件.2. uImage:这个Image应该是地球都知道的,这里就不多说了,编译命令如下:$ make ARCH=powerpc CROSS_COMPILE=/toolchain/freescale-2010.09/bin/powerpc-linux-gnu- uImage编译成功后会在arch/powerpc/boot/下生成uImage文件,这就是我们需要的内核Image文件.3. simpleImage.xxxx和simpleImage.initrd.xxxx:这里的xxxx是特定目标板名字,我的目标板是evm440,也就是simpleImage.evm440和simpleImage.initrd.evm440。

Android编译过程总结及android中各种img文件的作用以及系统启动过程

Android编译过程总结及android中各种img文件的作用以及系统启动过程

Android编译过程总结及android中各种img文件的作用以及系统启动过程编译环境:ubuntu 10.04(或者更高)(windows平台目前不被支持)本文以编译android2.3为例,64位操作系统1、编译环境的准备(1)确保安装有ubuntu系统或者虚拟机(2)安装JDK1.6(对于Android2.3以上代码)$ sudo add-apt-repository "deb/ lucid partner"$ sudo add-apt-repository "deb-src/ubuntu lucid partner"$ sudo apt-get update$ sudo apt-get installsun-java6-jdk(3)安装一些需要软件包$ sudo apt-get install git-coregnupg flex bison gperf build-essential \zip curl zlib1g-dev libc6-devlib32ncurses5-dev ia32-libs \x11proto-core-dev libx11-devlib32readline5-dev lib32z-dev \libgl1-mesa-dev g++-multilibmingw32 tofrodos(4)安装repo$ git clonegit:///tools/repo.git$ mkdir ~/bin$ cp repo-script/repo~/bin$ vim ~/.bashrc,将~/bin加入PARH环境变量,如:$ exportPATH=~/bin:$PATH保存后,同步更新:source~/.bashrc(5)设置git执行以下语句$git config "你的名字"$git config --global user.email"你的email地址"(6)同步源代码1)创建工程目录:$ mkdir myandroid$ cd myandroid2)repo初始化以及同步代码$repo init ****************.x.xx:git库名/manifest.git -b 主分支名在此过程中需要输入名字和email地址。

MTALLMT7620A编译OPENWRT教程20240208

MTALLMT7620A编译OPENWRT教程20240208

MTALLMT7620A编译OPENWRT教程20240208步骤1:准备工作首先,你需要一个支持OPENWRT编译的Linux环境。

推荐使用Ubuntu 14.04或更高版本。

你还需要安装一些必要的软件包。

在终端中运行以下命令进行安装:```sudo apt-get updatesudo apt-get install build-essential libncurses5-dev zlib1g-dev gawk git ccache gettext libssl-dev xsltproc wget```步骤2:获取源代码```cd openwrt```步骤3:配置编译环境运行以下命令来配置编译环境:```./scripts/feeds update -a./scripts/feeds install -amake menuconfig```在菜单配置界面中,你可以选择你需要的软件包和配置。

根据你的需求进行选择和配置,然后保存并退出。

步骤4:开始编译运行以下命令开始编译:```make```这个过程可能需要一些时间,取决于你的计算机性能和你选择的软件包。

编译完成后,你将在bin目录下找到编译好的固件。

步骤5:刷写固件你可以通过以下步骤将编译好的固件刷写到MT7620A设备中:1.进入路由器的管理界面,找到固件升级选项。

2.选择刚刚编译好的固件文件并开始升级。

3.等待升级过程完成,设备将会重启并加载新的固件。

请注意,在刷写固件之前,请确保你已经备份了路由器的配置文件,以免升级过程中丢失重要数据。

总结:以上是一个基本的MT7620A编译OPENWRT教程。

编译OPENWRT是一个复杂的过程,需要一定的编程和系统知识。

如果你是初学者,可能需要花费一些时间去了解相关的知识。

希望这篇教程能够帮助你完成编译过程。

android img 的编译过程

android img 的编译过程

android img 的编译过程
Android img的编译过程通常包括以下步骤:
在Android源码根目录下执行初始化环境命令:source build/envsetup.sh。

使用lunch命令选择需要编译的版本,如:lunch full-eng。

执行make命令进行编译,如:make bootimage,这个命令会编译生成boot.img。

boot.img的生成过程主要是将kernel、ramdisk、dtb打包到一起。

在这个过程中,需要用到dtb.img,如果dtb.img过大导致编译不过,那么需要分析dtb.img的生成过程。

dtb.img实际上是将kernel下的dts文件重新命名后拷贝到out目录下生成的。

此外,编译Android系统时,make命令实际上是在执行Makefile文件。

Android系统的Makefile文件在源码根目录下,并且这个Makefile文件会包含另一个主要的Makefile文件,即main.mk。

在main.mk中,定义了一个默认目标droid,这个目标依赖于droid_targets。

droid_targets又依赖于droidcode和dist_files两大伪目标。

当执行make命令时,make工具会检查并解析这些依赖关系,然后按照依赖顺序生成目标文件。

MTALL MT7620A编译OPENWRT教程20150208

MTALL MT7620A编译OPENWRT教程20150208

A、文件系统、USB 存储、SD 卡支持相关选项: ........................................................................ 3 B、网络相关配置: ....................................................................................................................... 4 C、其他应用程序配置: ............................................................................................................... 4 2、 A、 B、 C、 D、 E、 F、 3、 A、 B、 C、 D、 MTALL 相关配置文件修改 ....................................................................................................... 4 dts 硬件配置(板子最重要的配置) .................................................................................. 5 增加编译时生成 MTALL 的 bin 文件 .................................................................................... 7 网络配置定义 ...................................................................................................................... 8 LED 配置定义 ....................................................................................................................... 8 其它定义文件 ...................................................................................................................... 8 增加 Target profile 中单独编译选项 .................................................................................... 8 操作技巧.................................................................................................................................. 9 编译技巧 .............................................................................................................................. 9 烧录技巧(含 shell 固件升级方式) .................................................................................. 9 配置技巧:............................................................................................................................ 11 调试技巧................................................................................................................................ 12

uboot二次编译

uboot二次编译

uboot二次编译
对于uboot的二次编译,我们首先需要明确为什么需要进行二
次编译。

可能的原因包括需要修改uboot的配置选项、添加新的功
能或驱动、修复bug等。

在进行二次编译之前,我们需要确保已经
安装了交叉编译工具链,因为uboot是在交叉编译环境下进行编译的。

首先,我们需要使用make命令清除之前的编译结果,可以使用
命令"make distclean"来清除之前的编译产生的文件。

然后,我们
可以使用"make menuconfig"命令来配置uboot,这个命令会打开一
个菜单界面,我们可以在这个界面上对uboot进行配置,包括开启
或关闭某些功能、选择目标平台等。

配置完成后,我们可以运行"make"命令来进行编译,编译完成
后会生成u-boot.bin等文件。

如果需要将uboot烧录到目标设备上,可以使用对应的烧录工具进行烧录。

另外,如果需要在uboot中添加新的功能或驱动,我们需要修
改对应的源代码文件,然后进行编译。

在修改源代码文件后,我们
需要运行"make clean"命令清除之前的编译结果,然后再运行
"make"命令进行重新编译。

总的来说,uboot的二次编译需要在交叉编译环境下进行,首先清除之前的编译结果,然后进行配置、修改源代码、编译,最后可以将生成的文件烧录到目标设备上。

希望这个回答能够帮助你理解uboot的二次编译过程。

uboot配置 编译 连接全过程

uboot配置 编译 连接全过程

uboot 配置编译连接全过程分类:Uboot 2011-11-14 20:48 415人阅读评论(1) 收藏举报根据README中Porting Guide 的指示精神,我们要在新板子上移植UBoot,最快速的办法就是查看当前UBoot 代码中是否有对相似于待移植板子的其他板子的支持(这应该又是一个可考虑成为习惯甚至本能的做法。

也即拿到不熟悉的软件包后,看看里面有没有自己熟悉的、或者和自己目前要做的东西很相似的部分,从这个部分入手往往能很快的解决问题)。

很幸运,我们在里面找到了三星公司所生产的SMDK2410参考板,这是三星公司早先为推销其生产的ARM9芯片-S3C2410所推出的一块PCB参考设计板(推出时随板子附加了很多的软硬件资料)。

知道这个后,我们很高兴,因为我们知道我们板子上的CPU——S3C2440正是S3C2410的升级版。

所以,在真正动手移植之前,分析一下新版本UBoot中如何支持SMDK2410的,自然成为接下来要做的事情。

UBoot本身是用GNU工具链开发的,那这就意味着其代码包里面必然会有很多的Makefile文件,因为GNU Make正是用来管理软件项目编译的GNU工具。

而且,正如我们前面说的,UBoot能支持如此多的CPU体系结构和操作系统,那它就必定会有很多的配置选项用于配置。

所以分析支持SMDK2410参考板的具体代码之前,我们必须先弄懂UBoot的配置编译过程。

我们只有对此了然于胸了,才能比较顺利的完成移植。

所幸的是,不像Linux内核代码,UBoot 的代码量并不多,分析起来并不痛苦。

作为UBoot学习移植系列的第一篇文章,我在这里就以SMDK2410板子的支持作为例子,分析新版本UBoot(2010.06)的配置编译过程。

作为前提,你应该知道一些GNU Make以及一些Bash Shell Script的知识。

从UBOOT用户的角度来讲,其编译配置过程倒是非常的简单,只需要在命令行中切换到UBoot目录下输入两个命令:[csicong@juliantec u-boot-2010.06]$ make ARCH=arm CROSS_COMPILE=arm-linux- smdk2410_config[csicong@juliantec u-boot-2010.06]$ make ARCH=arm CROSS_COMPILE=arm-linux-第一个命令完成UBoot for smdk2410参考板的配置,第二个命令则真正编译出所需要的UBoot 二进制映像文件,编译出来之后我们需要将其下载到FLASH中。

【转】编译android之后生成的img文件介绍

【转】编译android之后生成的img文件介绍

【转】编译android之后生成的img文件介绍编译android 之后生成的 img 文件介绍在编译android 之后,会生成几个image 文件,这些文件是:1。

ramdisk.img : 一个分区影像文件,它会在kernel 启动的时候,以只读的方式被 mount ,这个文件中只是包含了 /init 以及一些配置文件,这个ramdisk 被用来调用init,以及把真正的root file system mount 起来。

2。

system.img:是包含了整个系统,android 的framework,application 等等,会被挂接到 "/" 上,包含了系统中所有的二进制文件system|-- app| |-- Browser.apk| |-- Contacts.apk| |-- ContactsProvider.apk| |-- Development.apk| |-- Fallback.apk| |-- GoogleApps.apk| |-- GoogleAppsProvider.apk| |-- Home.apk| |-- ImProvider.apk| |-- Maps.apk| |-- MediaProvider.apk| |-- Phone.apk| |-- SettingsProvider.apk| |-- TelephonyProvider.apk| |-- XmppService.apk| `-- XmppSettings.apk|-- bin| |-- AudioHardwareRecord | |-- AudioInRecord| |-- RecursiveMutexTest | |-- SRecTest| |-- SRecTestAudio| |-- UAPI_PortabilityTest | |-- UAPI_SrecT est| |-- UAPI_test| |-- am| |-- app_process| |-- busybox| |-- cat -> toolbox| |-- chmod -> toolbox| |-- cmp -> toolbox| |-- crasher| |-- dalvikvm| |-- date -> toolbox| |-- dbus-daemon| |-- dd -> toolbox| |-- debuggerd| |-- dexdump| |-- dexopt| |-- df -> toolbox| |-- dmesg -> toolbox| |-- drm1_unit_test| |-- drm2_unit_test| |-- dumpstate| |-- dumpsys| |-- exists -> toolbox| |-- getevent -> toolbox| |-- hd -> toolbox| |-- ifconfig -> toolbox | |-- input| |-- insmod -> toolbox | |-- install_boot_image | |-- ioctl -> toolbox| |-- kill -> toolbox| |-- linker| |-- ln -> toolbox| |-- log -> toolbox| |-- logcat| |-- ls -> toolbox| |-- lsmod -> toolbox | |-- mem_profiler| |-- mkdir -> toolbox | |-- mkdosfs -> toolbox | |-- monkey| |-- mount -> toolbox | |-- mtptest| |-- netcfg| |-- netstat -> toolbox | |-- notify -> toolbox | |-- ping -> toolbox| |-- powerd -> toolbox | |-- pppd| |-- printenv -> toolbox | |-- ps -> toolbox| |-- pv| |-- r -> toolbox| |-- reboot -> toolbox| |-- renice -> toolbox| |-- resetradio -> toolbox | |-- rild| |-- rm -> toolbox| |-- rmdir -> toolbox| |-- rmmod -> toolbox| |-- ro.xml| |-- ro2.xml| |-- roerror.xml| |-- rotatefb -> toolbox | |-- route -> toolbox| |-- runtime| |-- sdutil| |-- sendevent -> toolbox | |-- service| |-- setconsole -> toolbox | |-- setkey -> toolbox| |-- setprop -> toolbox | |-- sh| |-- showmap| |-- showslab| |-- sleep -> toolbox| |-- smd -> toolbox| |-- sqlite3| |-- ssltest| |-- start -> toolbox| |-- stop -> toolbox| |-- su| |-- sync -> toolbox| |-- syren -> toolbox| |-- system_server| |-- toolbox| |-- umount -> toolbox| |-- usbd| |-- watchprops -> toolbox | |-- webgrab -> toolbox | `-- wipe -> toolbox|-- build.prop|-- etc| |-- event-log-tags| |-- favorites-default.xml | `-- gservices.xml|-- fonts| |-- DroidSans-Bold.ttf| |-- DroidSans.ttf| |-- DroidSansFallback.ttf | |-- DroidSansMono.ttf| |-- DroidSerif-Bold.ttf| |-- DroidSerif-BoldItalic.ttf | |-- DroidSerif-Italic.ttf| `-- DroidSerif-Regular.ttf |-- framework| |-- am.jar| |-- core.jar| |-- ext.jar| |-- framework-res.apk| |-- framework-tests.jar| |-- framework.jar| |-- input.jar| |-- monkey.jar| `-- ssltest.jar|-- lib| |-- libFFTEm.so| |-- libUAPI_jni.so| |-- libaes.so| |-- libandroid_runtime.so | |-- libaudioflinger.so| |-- libc.so| |-- libcorecg.so| |-- libcrypto.so| |-- libctest.so| |-- libcutils.so| |-- libdbus.so| |-- libdl.so| |-- libdrm1.so| |-- libdrm1_jni.so| |-- libdvm.so| |-- libembunit.so| |-- libevent.so| |-- libexpat.so| |-- libhardware.so| |-- libicudata.so| |-- libicui18n.so| |-- libicuuc.so| |-- libm.so| |-- libmedia.so| |-- libmedia_jni.so| |-- libnativehelper.so| |-- libopengles_cm.so| |-- libpim.so| |-- libpixelflinger.so| |-- libpv.so| |-- libreference-ril.so| |-- libril.so| |-- libsgl.so| |-- libsonivox.so| |-- libsqlite.so| |-- libssl.so| |-- libstdc++.so| |-- libsurfaceflinger.so| |-- libsystem_server.so| |-- libthread_db.so| |-- libui.so| |-- libutils.so| |-- libwebcore.so| |-- libz.so| `-- security| `-- cacerts.bks|-- lost+found|-- media| `-- audio| `-- ringtones| |-- em_ringtone1.mp3 | |-- em_ringtone2.mp3 | |-- ring3.mp3| `-- ringer.mp3|-- sounds| `-- test.mid`-- usr|-- keychars| |-- qwerty.kcm.bin| |-- qwerty2.kcm.bin| `-- tuttle2.kcm.bin|-- keylayout| |-- qwerty.kl| `-- tuttle2.kl|-- share| |-- bsk| | |-- V_FD_speed_101.bsk | | `-- V_FD_std_101.bsk| `-- zoneinfo| |-- zoneinfo.dat| `-- zoneinfo.idx`-- srec`-- config|-- | |-- audio| | `-- v139| | `-- v139_113.nwv| |-- baseline.par| |-- baseline11k.par| |-- baseline8k.par| |-- dictionary| | `-- basic.ok| |-- g2p| | |-- en-US-15k.dictionary | | |-- en-US-60k.dictionary | | |-- en-US-90k.dictionary| | `-- en-US-ttp.data| |-- grammars| | |-- VoiceDialer.g2g| | |-- bothtags5.g2g| | |-- dynamic-test.g2g| | `-- enroll.g2g| `-- models| |-- generic.lda| |-- generic.mul| |-- generic.swiarb| |-- generic.swimdllst| |-- generic_f.swimdl| `-- generic_m.swimdl|-- shared| `-- sigmoid_param`-- speech_prompt.mp33。

uboot配置和编译过程详解

uboot配置和编译过程详解

uboot配置和编译过程详解uboot主Makefile分析11、uboot version确定(Makefile的24-29⾏)Makefile代码部分:[plain]1. VERSION = 12. PATCHLEVEL = 303. SUBLEVEL = 44. EXTRAVERSION =5. U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)6. VERSION_FILE = $(obj)include/version_autogenerated.h(1)uboot的版本号分3个级别:VERSION:主板本号PATCHLEVEL:次版本号SUBLEVEL:再次版本号EXTRAVERSION:另外附加的版本信息这4个⽤.分隔开共同构成了最终的版本号U_BOOT_VERSION ,这个变量记录了Makefile中配置的版本号。

2、include/version_autogenerated.h⽂件是编译过程中⾃动⽣成的⼀个⽂件,所以源⽬录中没有,但是编译过后的uboot中就有了。

它⾥⾯的内容是⼀个宏定义,宏定义的值内容就是我们在Makefile中配置的uboot的版本号。

2、HOSTARCH和HOSTOS[plain]1. Makefile代码部分:2. HOSTARCH := $(shell uname -m | \3. sed -e s/i.86/i386/ \4. -e s/sun4u/sparc64/ \5. -e s/arm.*/arm/ \6. -e s/sa110/arm/ \7. -e s/powerpc/ppc/ \8. -e s/ppc64/ppc/ \9. -e s/macppc/ppc/)10.11. HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \12. sed -e 's/cygwin.*/cygwin/')13. 注:sed的替换功能14. test = abcdefgabc15. Test1 = $(test) | sed -e s/abc/123/16. Test2 = $(test) | sed -e s/abc/123/g17. @echo $(Test1 )18. @echo $(Test2 )19. 结果:20. 123defabc21. 123def123abc被替换成了123,如果不加字母g,结果就变成了只有第⼀个abc被替换1、HOSTARCH这个名字:HOST是主机,就是当前在做开发⽤的这台电脑就叫主机;ARCH是architecture()的缩写,表⽰CPU的架构。

OpenWrt_MT7620a_开发流程_Bargen20150415

OpenWrt_MT7620a_开发流程_Bargen20150415

目录1虚拟机系统搭建2源码编辑2.1安装和升级必要的组件2.2下载源码2.3修改源码及编译2.4源码配置2.4.1后台管理界面为中文2.4.2默认开启无线网络2.4.3改SSID名称2.4.4进入系统后,增加密码(密码以admin为例)2.4.5修改后台登录的端口号2.4.6支持3G模块功能(USB方式)(OpenWrt之PandoraBox)(华为E261)3操作技巧3.1覆盖配置文件(推荐编辑方式)3.2推荐操作习惯3.3编译技巧3.4烧录技巧(含shell固件升级方式)3.4.1通过UBOOT进行烧录3.4.2进系统后通过命令行完成固件升级4报错及解决方法4.1Checking *libssl*... Failed.1 虚拟机系统搭建详情,参见:VirtualBox安装UbuntuKylin_刘云龙201504xx.docx;(VirtualBox安装流程;安装好后,在左上角“系统”菜单的“首选项”中选择“屏幕保护程序”,然后去掉左下角的“计算机空闲时激活屏幕保护程序”,然后按“关闭”,这个窗口是没有“应用”或“确定”之类的,直接关闭它就会保存。

)2 源码编辑2.1 安装和升级必要的组件a.选左上角的菜单“应用程序”-“附件”-“终端”,进入命令行,然后输入sudo –sH,注意大小写,然后输入装系统时设置的用户密码,就能切换到root(提示:输入密码的时候不会有*之类的显示的,是完全不显示,部分人不必惊慌)。

切换到root是为了安装或升级部分必要的组件,有些组件需要root权限。

b.切到root后,顺序输入:apt-get install g++apt-get install libncurses5-devapt-get install zlib1g-devapt-get install bisonapt-get install flexapt-get install unzipapt-get install autoconfapt-get install gawkapt-get install makeapt-get install gettextapt-get install gccapt-get install binutilsapt-get install patchapt-get install bzip2apt-get install libz-devapt-get install asciidocapt-get install subversionapt-get install git每一行回车后都会马上检测安装或升级那个组件,官方WIKI用的是单一条命令,我分开了,因为这样更容易查看每一个组件的安装是否成功。

mtk7620官方sdk编译说明

mtk7620官方sdk编译说明

MT7620官方sdk编译说明1、Ubuntu组件安装●以下以虚拟机vmware station10+ubuntu14.04 LTS 32位为例说明(1G内存+12G硬盘空间)。

●sudo apt-get install build-essential zlib1g-dev libncurses5-dev lzma lzma-dev(有遗漏请补充)●以下均以MTK_Ralink_ApSoC_SDK_4120_20120607.tar.bz2为例,请自行在ubuntu里解压好该压缩包。

2、toolchain准备2.1 buildroot安装●sudo cp RT288x_SDK/toolchain/buildroot-gcc342.tar.bz2 /opt●tar jxvf buildroot-gcc342.tar.bz2●mkdir /opt/buildroot-gdb●mkdir /opt/buildroot-gdb/bin2.2 lzma安装●tar xvf RT288x_SDK/toolchain/lzma-4.32.7.tar.gz●./configure●make2.3 xz安装●编译前,进入RT288x_SDK\toolchain将xz-5.0.3.tar.bz2解压tar –jxf xz-5.0.3.tar.bz2●./configure●Make●sudo make install2.4 squashfs安装●进入RT288x_SDK\toolchain,解压squashfs4.2.tar.bz2tar –jxf squashfs4.2.tar.bz2●Make●sudo make install2.5 其他修改点●cd /bin; rm sh; ln -s bash sh●RT288x_SDK\source\user\iptables-1.4.10\libiptc目录下没有makefile可以将RT288x_SDK\source\user\iptables-1.4.0rc1\libiptc目录下的makefile拷贝到这里.3、kernel代码编译说明进入RT288x_SDK\source目录下运行以下指令进行配置及编译●Make menuconfig●Make dep●Make编译结果如下。

ramdisk.img及boot.img的生成过程

ramdisk.img及boot.img的生成过程

ramdisk.img及boot.img的生成过程ramdisk.img及boot.img的生成过程ramdisk.imgramdisk.img是组成boot.img的重要部分,从Android/build/core/Makefile中可以看到ramdisk.img的生成该过程.# the ramdiskINTERNAL_RAMDISK_FILES := $(filter $(TARGET_ROOT_OUT)/%, \ $(ALL_PREBUILT) \ $(ALL_COPIED_HEADERS) \$(ALL_GENERATED_SOURCES) $(ALL_DEFAULT_INSTALLED_ MODULES))BUILT_RAMDISK_TARGET := $(PRODUCT_OUT)/ramdisk.img INSTALLED_RAMDISK_TARGET := $(BUILT_RAMDISK_TARGET) $(INSTALLED_RAMDISK_TARGET): $(MKBOOTFS) $(INTERNAL_RAMDISK_FILES) | $(MINIGZIP)...$(hide) $(MKBOOTFS) $(TARGET_ROOT_OUT) | $(MINIGZIP) > $@ramdisk.img是用mkbootfs工具从out/target/product/tcc8900/root目录制作得到,所以,需要把注意力转移到out/target/product/tcc8900/root 目录及其内容是如何生成的这一主题上来。

其实,ALL_PREBUILT包含了root目录中的大多数内容,另外的ALL_COPIED_HEADERS,ALL_GENERATED_SOURCES暂时不予以考虑。

以下列表列出了与out/target/product/tcc8900/root生成相关的文件:/init.goldfish.rc------------------->Android/system/core/rootdir/etc/init.goldfish.rc/init.rc ------------------->device/telechips/tcc92xx-common/init.rc如果device/telechips/tcc92xx-common/init.rc不才存在,将使用Android/system/core/rootdir/etc/init.rc文件/sbin(create)-------------------------------->Android/system/core/rootdir/Android.mk/dev(create)--------------------------------->Android/system/core/rootdir/Android.mk/proc(create)-------------------------------->Android/system/core/rootdir/Android.mk/sys(create)--------------------------------->Android/system/core/rootdir/Android.mk/system(create)------------------------------>Android/system/core/rootdir/Android.mk/data(create)-------------------------------->Android/system/core/rootdir/Android.mk/sbin/adbd(compile)-------------------------->Android/system/core/adb/Android.mk/init(compile)------------------------------->Android/system/core/init/Android.mk/sbin/timetest(compile)---------------------->Android/system/core/extras/timeinfo/Android.mk /lib/modules/tcc92x_nand.ko(copy)------------>Android/hardware/telechips/nand/Makefile/lib/modules/ufsd.ko(copy)------------------->Android/telechips/tcc92xx-common/Android.mk/lib/modules/viqe.ko(copy)------------------->Android/telechips/tcc92xx-common/Android.mk至于其他的诸如/config , /cache, /nand,/inand,/mnt,/mnt/nand,/sata,/scisi,/app-cache等目录都在init.rc中被创建。

U-Boot的编译和使用

U-Boot的编译和使用

4.
5.
设置好堆栈。
跳转到 stage2 的 C 入口点。
双实科技--优质嵌入式系统教育资源供应商
5.1.3、Bootloader的启动(6)
Boot Loader 的 stage2 通常包括以下步骤(以执行的先后
顺序):
1. 2. 3. 4. 5.
初始化本阶段要使用到的硬件设备。 检测系统内存映射(memory map)。 将 kernel 映像和根文件系统映像从 flash 上读到 RAM 空间中。 为内核设置启动参数。 调用内核。
双实科技--优质嵌入式系统教育资源供应商
5.1.3、Bootloader的启动(2)
1.网络启动方式 这种方式的开发板不需要配置较大的 存储介质,跟无盘工作站有点类似。 但是使用这种启动方式之前,需要把 Bootloader 安装到板上的EPROM 或 者Flash中。Bootloader 通过以太网 接口远程下载Linux 内核映像或者文 件系统。这种方式对于嵌入式系统开 发来说非常重要。
双实科技--优质嵌入式系统教育资源供应商
5.1.3、Bootloader的启动(5)
Boot Loader的启动流程: Boot Loader 的 stage1 通常包括以下步骤(以执行的先后顺序):
1. 2. 3.
硬件设备初始化。 为加载 Boot Loader 的 stage2 准备 RAM 空间。 拷贝 Boot Loader 的 stage2 到 RAM 空间中。
5.1、初识BootLoader
5.1.1、初识BootLoader 5.1.2、Bootloader的种类 5.1.3、 Bootloader的启动
双实科技--优质嵌入式系统教育资源供应商

uboot编译过程

uboot编译过程

uboot编译过程
Uboot是一种开源的引导载入程序,用于嵌入式系统中的启动过程。

它通常被用来引导Linux内核。

以下是uboot编译的过程:
1. 下载uboot源码:在uboot官网上下载最新版本的uboot源码。

2. 配置编译环境:安装交叉编译工具链,例如arm-linux-gcc 等。

3. 配置uboot:进入uboot的根目录,运行make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig命令进行配置。

在这里可以设置uboot的启动参数、内存布局等。

4. 编译uboot:运行make ARCH=arm CROSS_COMPILE=arm-linux-命令进行编译。

编译完成后,会在uboot目录下生成u-boot.bin文件。

5. 烧录uboot:将u-boot.bin文件烧录到板子的Flash中,使其可以在启动时被加载。

6. 测试uboot:使用串口调试工具,连接开发板和PC,确认uboot 能够正常启动,可以接受命令行输入。

以上就是uboot编译的过程。

在实际开发中,还需要进行调试和优化,使uboot能够顺利地引导Linux内核。

- 1 -。

U-Boot编译过程完全分析

U-Boot编译过程完全分析

U-Boot编译过程完全分析2.1U-BootMakefile分析2.1.1U-Boot编译命令对于mini2440开发板,编译U-Boot需要执行如下的命令:$makemini2440_config$makeall使用上面的命令编译U-Boot,编译生成的所有文件都保存在源代码目录中。

为了保持源代码目录的干净,可以使用如下命令将编译生成的文件输出到一个外部目录,而不是在源代码目录中,下面的2种方法都将编译生成的文件输出到/tmp/build目录:$e某portBUILD_DIR=/tmp/build$makemini2440_config$makeall或$makeO=/tmp/buildmini2440_config(注意是字母O,而不是数字0)$makeall为了简化分析过程,方便读者理解,这里主要针对第一种编译方式(目标输出到源代码所在目录)进行分析。

2.1.2U-Boot配置、编译、连接过程1.U-Boot配置过程(1)定义主机系统架构HOSTARCH:=$(helluname-m|\\ed-e/i.86/i386/\\-e/un4u/parc64/\\-e/arm.某/arm/\\-e/a110/arm/\\-e/powerpc/ppc/\\-e/ppc64/ppc/\\-e/macppc/ppc/)“ed–e”表示后面跟的是一串命令脚本,而表达式“/abc/def/”表示要从标准输入中,查找到内容为“abc”的,然后替换成“def”。

其中“abc”表达式用可以使用“.”作为通配符。

(2)定义主机操作系统类型HOSTOS:=$(helluname-|tr'[:upper:]''[:lower:]'|\\ed-e'/\\(cygwin\\).某/cygwin/')'[:upper:]''[:lower:]'”作用是将标准输入中的所有大写字母转换为响应的小写字母。

uImage编译生成流程分析

uImage编译生成流程分析

uImage编译⽣成流程分析uImage的编译⽣成参考资料 : linux-4.0.0 + arm架构1. vmlinux的⽣成--->Makefileinit-y := init/drivers-y := drivers/ sound/ firmware/net-y := net/libs-y := lib/core-y := usr/core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \$(core-y) $(core-m) $(drivers-y) $(drivers-m) \$(net-y) $(net-m) $(libs-y) $(libs-m)))vmlinux-alldirs := $(sort $(vmlinux-dirs) $(patsubst %/,%,$(filter %/, \$(init-) $(core-) $(drivers-) $(net-) $(libs-))))# Externally visible symbols (used by link-vmlinux.sh)export KBUILD_VMLINUX_INIT := $(head-y) $(init-y)export KBUILD_VMLINUX_MAIN := $(core-y) $(libs-y) $(drivers-y) $(net-y)export KBUILD_LDS := arch/$(SRCARCH)/kernel/vmlinux.ldsvmlinux-deps := $(KBUILD_LDS) $(KBUILD_VMLINUX_INIT) $(KBUILD_VMLINUX_MAIN)vmlinux: scripts/link-vmlinux.sh $(vmlinux-deps) FORCE结论:vmlinux是根据arch/arm/kernel/vmlinux.lds链接以下⽬录下的.o⽂件⽽⽣成vmlinux = arch/arm/kernel/head.o init/ usr/ kernel/ mm/ fs/ ipc/ security/ crypto/ block/ lib/ drivers/ sound/ firmware/ net/ 2. ⽤vmlinux去除调试信息和符号⽣成arch/arm/boot/Image---> arch/arm/boot/MakefileOBJCOPYFLAGS :=-O binary -R .comment -S$(obj)/Image: vmlinux FORCE$(call if_changed,objcopy) # 1. ⽤ojbcopy去掉符号@$(kecho) ' Kernel: $@ is ready'3. ⽤arch/arm/boot/Image进⼀步⽣成arch/arm/boot/compressed/vmlinux---> arch/arm/boot/compressed/Makefilesuffix_$(CONFIG_KERNEL_GZIP) = gzip$(obj)/piggy.$(suffix_y): $(obj)/../Image FORCE # 1. 将arch/arm/boot/Image ⽤gzip压成piggy.gzip$(call if_changed,$(suffix_y))$(obj)/piggy.$(suffix_y).o: $(obj)/piggy.$(suffix_y) FORCE # 2. piggy.gzip.S + piggy.gzip,⽣成piggy.gzip.o $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \$(addprefix $(obj)/, $(OBJS)) $(lib1funcs) $(ashldi3) \$(bswapsdi2) FORCE@$(check_for_multiple_zreladdr)$(call if_changed,ld)@$(check_for_bad_syms)结论 : arch/arm/boot/compressed/vmlinux是根据 arch/arm/boot/compressed/vmlinux.lds进⾏链接⽣成的arch/arm/boot/compressed/vmlinux = arch/arm/boot/compressed/head.o + misc.o + piggy.gzip.o4. ⽤arch/arm/boot/compressed/vmlinux⽣成arch/arm/boot/zImage---> arch/arm/boot/Makefile$(obj)/zImage: $(obj)/compressed/vmlinux FORCE$(call if_changed,objcopy)@$(kecho) ' Kernel: $@ is ready'5. ⽤arch/arm/boot/zImage⽣成arch/arm/boot/uImage---> arch/arm/boot/Makefile$(obj)/uImage: $(obj)/zImage FORCE@$(check_for_multiple_loadaddr)$(call if_changed,uimage) # 1. cmd_uimage命令 uImage = 64字节头部 + zImage@$(kecho) ' Image $@ is ready'MISC. 过程关联脚本---> scripts/kbuild.includeif_changed = $(if $(strip $(any-prereq) $(arg-check)), \@set -e; \$(echo-cmd) $(cmd_$(1)); \printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd)---> scripts/makefile.libquiet_cmd_objcopy = OBJCOPY $@cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $(OBJCOPYFLAGS_$(@F)) $< $@ quiet_cmd_uimage = UIMAGE $(UIMAGE_OUT)cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A $(UIMAGE_ARCH) -O linux \-C $(UIMAGE_COMPRESSION) $(UIMAGE_OPTS-y) \-T $(UIMAGE_TYPE) \-a $(UIMAGE_LOADADDR) -e $(UIMAGE_ENTRYADDR) \-n $(UIMAGE_NAME) -d $(UIMAGE_IN) $(UIMAGE_OUT)。

U-Boot 基本编译教程

U-Boot 基本编译教程

U-Boot 基本编译教程此教程为入门教程只讲解如何编译 U-Boot,不讲解代码修改及排错等。

此教程适用于 AR 及 QCA 系列的 ar71xx 平台。

若有疑问,或看不懂,请直接回帖,以便楼主修改教程。

准备工作:Linux 系统:32 位 / 64 位均可。

楼主使用的是 Ubuntu 12.10 amd64。

64 位环境下需要安装 32 位库。

如 Ubuntu 下是运行sudo apt-get install libc6:i386 libgcc1:i38 libstdc++5:i386 libstdc++6:i386。

基础编译环境:一般来说每个发行版的 Linux 系统都有包管理器。

例如在 Ubuntu 的 Shell 里运行sudo apt-get install build-essential就可安装好编译环境。

其他的系统请自行百度。

基本的 Linux Shell 基础:这个只能自己想办法解决了。

入门级:入门级使用现成的工具链和编译脚本,使用最少的命令完成代码编译。

使用 TL-MR3420 v1 的代码进行讲解。

1. 下载源代码打开/en/support/gpl/,在左侧选择 3G/4G Routers,然后在列表中选择 TL-MR3420 V1 的代码进行下载。

2. 解压代码这个就随便了,一般解压在主目录。

将下载的 mr3420_3220v1.tar.gz 移动到主目录。

注意:这里压缩包扩展名有误,实际上是 bzip2 压缩的。

打开终端,此时终端应该默认在主目录下,若不在主目录下,就运行cd ~命令进入主目录。

运行命令tar -jxvf mr3420_3220v1.tar.gz以解压代码。

3. 编译代码运行命令cd mr3420_3220v1/build进入代码编译目录。

运行命令make BOARD_TYPE=ap99 fs_prep以创建编译过程所需的目录。

运行命令make BOARD_TYPE=ap99 uboot以开始编译 U-Boot。

uImage制作

uImage制作

uImage制作Uimage制作[目标板信息]CPU ARM920T 结构芯片三星 S3c2410X 工作频率 203MHzFLASH SAMSUNG K9F1208 64M NANDSDRAM HY57V561620AT-H 32MEtherNet 网卡 DM9000AE 100M 以太网对于Linux 2.6 以上内核,内核编译的时候支持uImage目标#make menuconfig#make uImage或者按照u-boot源代码根目录下的README文件中关于Building a Linux Image一节,手动生成uImage,步骤如下:1)配置编译内核,生成vmlinux(未压缩的内核镜像)2)把vmlinux转成原始二进制形式#{ CROSS_COMPILE }-objcopy –O binary \-R .note –R .comment \-S vmlinux linux.bin这里的CROSS_COMPILE是交叉编译前缀,比如常用的arm-linux3)压缩linux.bin#gzip -9 linux.bin4)用mkimage生成uImage,mkimage命令的具体使用可以用mkimage –help查看#mkimage –A arm –O linux –T kernel –C gzip –a 0x30008000 –e 0x30008000 –n “Linux Kernel Image” –d linux.bin.gz uImage 这里有几个参数要注意①-C gzip 指明原始的二进制内核是用gzip 压缩的②-a0x30008000 –e 0x30008000对于不同的image类型-a –e 选项有不同的用途,可以参考cmd_bootm.c中的do_bootm函数。

对于Linux Kernel,以具体的例子说明:#tftp 0x30800000 image#bootm 0x30800000对于生成uImage时使用-C NONE时,u-boot只是简单的将image从0x30800000搬到-a 指定的地址。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档