find /(查找范围) -name 查找关键字 -printPermSize=64M JVM初始分配的非堆内存 -XX因为执行了make 100ask24x0

检索目录:find /(查找范围) -name ‘查找关键字’ -type d
查找文件:find /(查找范围) -name 查找关键字 -print

1.参数的含义 -vmargs -Xms128M -Xmx512M
-XX:PermSize=64M -XX:MaxPermSize=128M -vmargs
说明后是VM的参数,所以后面的实际还是JVM的参数了 -Xms128m
JVM初始分配的积内存 -Xmx512m JVM最酷允许分配的积聚内存,按需分配
-XX:PermSize=64M JVM初始分配的非堆内存 -XX:MaxPermSize=128M
JVM最要命允许分配的非堆内存,按需要分配

 

 

我们先是了解一下JVM内存管理的体制,然后重新解释每个参数代表的意思。

通过make 100ask24x0_config 指令配置好芯片选型后,使用make指令来生成uboot.bin文件

  本文学习目标: 

 

1)堆(Heap)和非堆(Non-heap)内存

     
 对Makefile文件进行基本了解,掌握make指令是怎落实生成uboot.bin的进程

如果欲再次进一步的问询,可以参看Linux的一声令下详解。

 按照合法的传教:“Java
虚拟机具有一个堆,堆是运作时数区域,所有类实例和反复组的外存均从这边分配。堆是当
Java 虚拟机启动时创造的。”“在JVM中积聚之外的内存称为非堆内存(Non-heap
memory)”。
 可以看来JVM主要管理有限栽类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留住开发人员使用的;非堆就是JVM留给自己之所以的,
 所以方法区、JVM内部处理还是优化所要的内存(如JIT编译后之代码缓存)、每个接近组织(如运行时数池、字段和措施数据)以及艺术及构造方法的代码都以非堆内存中。 

1.接下来开始分析make指令,首先打开u-boot-1.1.6/Makefile文件:

此地摘抄如下:

堆内存分配

117 include $(OBJTREE)/include/config.mk               //调用config.mk这个文件
118 
...
124 ifeq ($(ARCH),ppc)                                 //判断config.mk这个文件中ARCH是否等于ppc
125 CROSS_COMPILE = powerpc-linux- 
126 endif
127 ifeq ($(ARCH),arm)                                 //判断config.mk这个文件中ARCH是否等于arm
128 CROSS_COMPILE = arm-linux- 
129 endif
...
164 include $(TOPDIR)/config.mk

 

 JVM初始分配的堆内存由-Xms指定,默认是物理内存的1/64;JVM最酷分配的积聚内存由-Xmx指定,默认是情理内存的1/4。默认空余积内存小于40%常,JVM就见面附加堆直到-Xmx的最老范围;
 空余堆积内存大于70%常常,JVM会减少堆直到-Xms的尽小范围。因此服务器一般安装-Xms、-Xmx
相等以避免以历次GC 后调整堆的轻重缓急。  说明:如果-Xmx
不指定要指定偏小,应用或会见招java.lang.OutOfMemory错误,此错误来自JVM,不是Throwable的,无法用try…catch捕捉。 

  

·find path -option [ -print ] [ -exec -ok command ] {} /;
#-print 将翻开找到的公文输出到正规输出
#-exec command {} /;     —–将查到的文本实行command操作,{} 和
/;之间产生空格
#-ok 和-exec相同,只不过当操作前如果咨询用户

非堆内存分配

坐实施了make 100ask24x0_config 后,其中include/config.mk内容为:

====================================================

 JVM以-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置极端充分非堆内存的分寸,默认是物理内存的1/4。(还有一样游说:MaxPermSize缺省值和-server
-client选项有关,
 -server选宗下默认MaxPermSize为64m,-client选项下默认MaxPermSize为32m。这个自家尚未试。)
 上面错误信息中的PermGen space的全是Permanent Generation
space,是靠内存的永久保存区域。还不曾打明白PermGen
space是属非堆内存,还是就是非堆内存,但最少是属了。
XX:MaxPermSize设置了小会促成java.lang.OutOfMemoryError: PermGen space
就是外存益出。  说说为何会内存益出: 
(1)这等同组成部分外存用于存放Class和Meta的信,Class在为
Load的时刻让放入PermGen space区域,它同存放Instance的Heap区域不同。 
(2)GC(Garbage Collection)不会见以主程序运行期对PermGen
space进行清理,所以若你的APP会LOAD很多CLASS 的话语,就特别可能出现PermGen
space错误。   这种不当常见在web服务器对JSP进行pre compile的时候。  

ARCH = arm
CPU = arm920t
BOARD = 100ask24x0
SOC = s3c24x0

-name filename             #寻找名也filename的文书
-perm                       #随执行权来探寻
-user   username            #按部就班文件属主来查找
-group groupname            #按部就班组来寻觅
-mtime -n +n              
#按照文件更改时间来查找文件,-n指n天中,+n指n天以前
-atime   -n +n              #遵循文件访问时来查
-perm                        #照执行权来查找
-user   username            #仍文件属主来查找
-group groupname            #本组来寻找
-mtime -n +n              
#依文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime   -n +n             
#论文件访问时来查找文件,-n指n天中,+n指n天因为前 
-ctime   -n +n             
#比如文件创建时间来查找文件,-n指n天以内,+n指n天坐前 
-nogroup                   
#查无有效属组的文书,即文件之属组在/etc/groups中未有
-nouser                    
#翻看无有效属主的文件,即文件的属于主在/etc/passwd中无存
-newer f1 !f2              找文件,-n指n天以内,+n指n天以前 
-ctime   -n +n             
#照文件创建时间来查找文件,-n指n天中,+n指n天坐前 
-nogroup                   
#翻开无有效属组的文书,即文件的属于组在/etc/groups中未在
-nouser                    
#查看无有效属主的文件,即文件之属主在/etc/passwd中无怀
-newer f1 !f2              #翻开更改时间比f1初但比f2老的文件
-type    b/d/c/p/l/f       
#查看是块设备、目录、字符设备、管道、符号链接、普通文书
-size     n[c]              #查长度为n块[或n字节]的文件
-depth                      #假使查找在进子目录前先查找完本目录
-fstype                     #查阅更改时间比f1新但于f2原有的公文
-type    b/d/c/p/l/f       
#查是片设备、目录、字符设备、管道、符号链接、普通文书
-size     n[c]              #查长度为n块[或n字节]的文件
-depth                      #如查找在上子目录前先查找完本目录
-fstype                    
#查看位于有平等项目文件系统中的文本,这些文件系统类型一般只是
在/etc/fstab中找到
-mount                      #翻开文件时不越文件系统mount点
-follow                    
#使赶上符号链接文件,就跟踪链接所依赖的公文
-cpio                  
#查位于有同档文件系统中之文书,这些文件系统类型一般只是
在/etc/fstab中找到
-mount                      #翻看文件时莫跳文件系统mount点
-follow                    
#假若遇符号链接文件,就跟链接所负的文本
-cpio                      
#本着郎才女貌的公文使用cpio命令,将她们备份到磁带设备中
-prune                      #不经意某个目录

2)JVM内存限制(最特别价值)

由ARCH=arm,所以第127表现实在,执行第128尽语句以arm-linux-来制定交叉编译器前缀。
中间第164推行之config.mk是属顶层目录的config,主要通过arm,arm920t,100ask24x0,s3c24x0来确定编译器、编译选项等
2.打开config.mk(主要作用如下几段子):

====================================================
$find ~ -name “*.txt” -print    #于$HOME中查.txt文件并出示
$find .   -name “*.txt” -print
$find .   -name “[A-Z]*” -pri26nbsp;  
#针对郎才女貌的文本使用cpio命令,将她们备份到磁带设备中
-prune                              #不经意某个目录

 首先JVM内存限制让实际的无限深物理内存,假而物理内存无限好的语句,JVM内存的极致特别价值与操作系统有酷要命的干。简单的说就32员处理器则可控内存空间有4GB,但是实际的操作系统会为一个限量,
 这个范围一般是2GB-3GB(一般的话Windows系统下啊1.5G-2G,Linux系统下为2G-3G),而64bit上述的处理器就是无见面时有发生限定了。

45 PLATFORM_LDFLAGS =
...
88 BOARDDIR = $(BOARD)                                        //$(BOARD)=100ask24x0
...
91 sinclude $(TOPDIR)/board/$(BOARDDIR)/config.mk         //调用 board/100ask24x0/config.mk中第25行"TEXT_BASE=0x33F80000."
...
143 LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds        //LDSCRIPT=.//board/100ask24x0/u-boot.lds
...
189 LDFLAGS += -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS)

=====================================================
$find ~ -name “*.txt” -print    #在$HOME中查.txt文件并显示
$find .   -name “*.txt” -print
$find .   -name “[A-Z]*” -print #查看以非常写字母开头的文本
$find /etc -name “host*” -print #查以host开头的公文
$find . -name “[a-z][a-z][0–9][0–9].txt”   -print
#翻以半单小写字母和一定量单数字开的txt文件
$find . -perm 755 -print
$find . -perm -007 -exec ls -l {} /;
#查阅有用户都不过读写尽之文件和-perm 777
$find . -type d -print
$find . ! -type d -print 
$find . -type l -print

2.
胡有些机器我以-Xmx和-XX:MaxPermSize都设置也512M之后Eclipse可以启动,而稍机器无法起动?
 通过上面对JVM内存管理之牵线我们都了解及JVM内存包含两种植:堆内存和非堆内存,另外JVM最可怜内存首先在实际的大体内存和操作系统。所以说设置VM参数导致程序无法起动主要有以下几种原因:
1) 参数中-Xms的值大于-Xmx,或者-XX:PermSize的价值大于-XX:MaxPermSize; 2)
-Xmx的价和-XX:MaxPermSize的总和超了JVM内存的极其老范围,比如当前操作系统最深外存限制,或者实际上的大体内存等等。说交实在物理内存这里需要证明一些之凡,
 如果你的内存是1024MB,但实际系统受到之所以到的连无可能是1024MB,因为来局部深受硬件占用了。

如下图,通过grep查找内容指令可以看到u-boot设置的TEXT_BASE地址为0x33F80000(若boot太要命还是SDRAM太小,可以减小TEXT_BASE基地址)

$find . -size +1000000c -print       #查长度大于1Mb底文件
$find . -size 100c        -print      # 查长度也100c的文书
$find . -size +10 -print            
#查长度超过期作废10片的文本(1块=512字节)

  1. 干什么将上面的参数写副到eclipse.ini文件Eclipse没有履相应之安装?
     那怎么同样的参数在快捷方式或者命令行中有效要于eclipse.ini文件中凡无济于事的吗?这是坐我们并未遵守eclipse.ini文件之装规则:
    参数形若“项
    值”这种样式,中间闹空格的内需换行书写,如果值备受发生空格的需要因此双引号包括起来。比如我们应用-vm
    C:/Java/jre1.6.0/bin/javaw.exe参数设置虚拟机,
    在eclipse.ini文件被要描写成这么: -vm  C:/Java/jre1.6.0/bin/javaw.exe 
    -vmargs  -Xms128M  -Xmx512M  -XX:PermSize=64M  -XX:MaxPermSize=128M 
    实际运作的结果好经Eclipse中“Help”-“About Eclipse
    SDK”窗口里的“Configuration Details”按钮进行查。
    另外待证明的凡,Eclipse压缩包着打带的eclipse.ini文件内容是这样的:
    -showsplash  org.eclipse.platform  –launcher.XXMaxPermSize  256m 
    -vmargs  -Xms40m  -Xmx256m 
    其中–launcher.XXMaxPermSize(注意最前头是有限独连接线)跟-XX:MaxPermSize参数的含义基本是千篇一律的,我当唯一的分别就是是前者是eclipse.exe启动之上装的参数,
    而后者是eclipse所使用的JVM中之参数。其实彼此设置一个即使得了,所以这里可以拿–launcher.XXMaxPermSize和生一行采取#注释掉。

  2. 外的启动参数。 如果你来一个夹审批的CPU,也许得品尝这参数:
    -XX:+UseParallelGC 让GC可以再快之行。(只是JDK 5里对GC新加的参数)

图片 1

$cd /
$find etc home apps   -depth -print | cpio -ivcdC65536 -o /dev/rmt0
$find /etc -name “passwd*” -exec grep “cnscn” {} /;
#关押是否在cnscn用户
$find . -name “yao*” | xargs file
$find . -name “yao*” | xargs echo   “” > /tmp/core.log
$find . -name “yao*” | xargs chmod o-w

补充:   如果你的WEB
APP下还为此了汪洋底老三方jar,其尺寸超过了服务器jvm默认的大大小小,那么即便会见起内存益出题目了。
解决方法: 设置MaxPermSize大小 
可以于myelipse里选中相应的服务器比如tomcat5,展开内部的JDK子项页面,来多服务器启动的JVM参数设置:
-Xms128m  -Xmx256m  -XX:PermSize=128M  -XX:MaxNewSize=256m 
-XX:MaxPermSize=256m 或者手动设置MaxPermSize大小,比如tomcat,
修改TOMCAT_HOME/bin/catalina.bat,在echo “Using CATALINA_BASE:
$CATALINA_BASE”上面投入以下行:  JAVA_OPTS=”-server -XX:PermSize=64M
-XX:MaxPermSize=128m

一定给为LDFLAGS内容中益了”-T board/100ask24x0/u-boot.lds -Ttext
0x33F80000″字段,(LDFLAGS:属于u-boot第四个因文件)

======================================================

提议:将一律之老三方jar文件移置到tomcat/shared/lib目录下,这样好减去jar
文档重复占用内存

3.继续看makefile:

find -name april*                     
在当前目录下搜寻以april开始之文书
find -name april* fprint file       
在当前目录下搜寻以april开始之公文,并将结果输出到file中
find -name ap* -o -name may* 查找以ap或may开头的文本
find /mnt -name tom.txt -ftype vfat
在/mnt下搜寻名称也tom.txt且文件系统类型为vfat的文件
find /mnt -name t.txt ! -ftype vfat  
在/mnt下寻找名称为tom.txt且文件系统类型不也vfat的公文
find /tmp -name wa* -type l          
在/tmp下查找名为wa开头都项目也标志链接的文书
find /home -mtime -2                 在/home下查最近简单上外转移过的文件
find /home   -atime -1                  查1天之内被存取过的文本
find /home -mmin   +60                 
在/home下查60分钟前反了之文书
find /home -amin +30                  查最近30分钟前受存取过之公文
find /home -newer tmp.txt            
在/home下查更新时间比tmp.txt近的文书要目录
find /home -anewer tmp.txt           
在/home下查存取时间比tmp.txt近的公文要目录
find /home -used -2                 
列出文件要目录给转移过以后,在2日内于存取过之公文要目录
find /home -user cnscn               
列出/home目录外属用户cnscn的文书要目录
find /home -uid +501                
列出/home目录外用户的认识别码大于501的文件要目录
find /home -group cnscn              列出/home内组为cnscn的文本或者目录
find /home -gid 501                   列出/home内组id为501之文书要目录
find /home -nouser                   
列出/home内无属本地用户的公文要目录
find /home -nogroup                  
列出/home内不属地方组的文本或者目录
find /home   -name tmp.txt   -maxdepth 4 列出/home内之tmp.txt
查时深度最多吗3层
find /home -name tmp.txt -mindepth 3 从第2层开始查看
find /home -empty                     查找大小为0的公文要空目录
find /home -size +512k               查大于512k的文件
find /home -size -512k               查小于512k的文件
find /home -links +2                 查硬连接数大于2底文书要目录
find /home -perm 0700                查权限为700之公文要目录
find /tmp -name tmp.txt -exec cat {} /;
find /tmp -name tmp.txt -ok rm {} /;

169 OBJS = cpu/$(CPU)/start.o                                //u-boot需要的目标文件,OBJS等于目标文件cpu/$(CPU)/start.o 
... 
193 LIBS = lib_generic/libgeneric.a                          //u-boot需要的库文件,LIBS等于库文件lib_generic/libgeneric.a  
194 LIBS += board/$(BOARDDIR)/lib$(BOARD).a                  //追加库文件board/100ask24x0/lib100ask24x0.a 
195 LIBS += cpu/$(CPU)/lib$(CPU).a                           //追加库文件cpu/arm920t/libarm920t.a 
...

214 LIBS := $(addprefix $(obj),$(LIBS))                      //addprefix为加前缀函数,其中obj=空,所以LIBS地址不变


...
222 SUBDIRS = tools \                                  //SUBDIRS伪命令:用来执行tools,examples,post,post\cpu子目录下面的make文件。
223 examples \
224 post \
225 post/cpu
...
239 ALL = $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND)    //all的依赖文件
240
241 all:    $(ALL)                                                          //使用make命令,相当于执行make all 
...
249 $(obj)u-boot.bin:   $(obj)u-boot                                            //生成u-boot.bin需要elf格式的u-boot,elf也就是通过ld链接文件生成的。
250 $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@                                 //执行:arm-linux-objcopy -O binary u-boot u-boot.bin
...

262 $(obj)u-boot:   depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)      //生成elf格式的u-boot所需要的依赖文件
263 UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) |sed -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
264 cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \                       
265 --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
266 -Map u-boot.map -o u-boot

find   / -amin   -10       # 查找在网被最终10分钟访问的文书
find   / -atime -2         # 查找在系面临最终48时访问的公文
find   / -empty              # 查找在系统受到吗空的文书要文件夹
find   / -group cat        # 查找在网被属 groupcat的公文
find   / -mmin -5         # 查找在系面临最后5分钟里窜了之文书
find   / -mtime -1        #招来在系统受到最终24钟头里窜了之公文
find   / -nouser             #检索在网被属作废用户之文书
find   / -user   fred       #找寻在系面临属于FRED这个用户之公文

以第263尽和266尽翻译出内容如下所示:

查当前目录下的有普通文书 

# find . -type f -exec ls -l {} /; 
-rw-r–r–    1 root     root        34928 2003-02-25
./conf/httpd.conf 
-rw-r–r–    1 root     root        12959 2003-02-25 ./conf/magic 
-rw-r–r–    1 root     root          180 2003-02-25 ./conf.d/README 
翻开当前目录下的保有普通文书,并于- e x e c选项中采用ls -l命令将其列出

=================================================
在/ l o g s目录中觅更改时间在5日以前的文书并删除其:
$ find logs -type f -mtime +5 -exec -ok rm {} /;

=================================================
查询当天窜过的公文
[root@book class]# find ./ -mtime -1 -type f -exec ls -l {} /;

=================================================
询问文件并问询是不是如显示
[root@book class]# find ./ -mtime -1 -type f -ok ls -l {} /; 
< ls … ./classDB.inc.php > ? y
-rw-r–r–    1 cnscn    cnscn       13709 1月 12 12:22
./classDB.inc.php
[root@book class]# find ./ -mtime -1 -type f -ok ls -l {} /; 
< ls … ./classDB.inc.php > ? n
[root@book class]#

=================================================
查询并付诸awk去处理
[root@book class]# who | awk ‘{print $1″/t”$2}’
cnscn   pts/0

=================================================
awk—grep—sed

[root@book class]# df -k | awk ‘{print $1}’ | grep -v ‘none’ | sed
s”///dev////g”
文件系统
sda2
sda1
[root@book class]# df -k | awk ‘{print $1}’ | grep -v ‘none’
文件系统
/dev/sda2
/dev/sda1

1)在/tmp中寻觅所有的*.h,并以这些文件被搜索“SYSCALL_VECTOR”,最后打印出有包含”SYSCALL_VECTOR”的文本称

A) find /tmp -name “*.h” | xargs -n50 grep SYSCALL_VECTOR
B) grep SYSCALL_VECTOR /tmp/*.h | cut   -d’:’ -f1| uniq >
filename
C) find /tmp -name “*.h” -exec grep “SYSCALL_VECTOR” {} /; -print

2)find / -name filename -exec rm -rf {} /;
find / -name filename -ok rm -rf {} /;

3)比如使物色磁盘中过量3M底文件:
find . -size +3000k -exec ls -ld {} ;

4)将find出来的物拷到另一个地方
find *.c -exec cp ‘{}’ /tmp ‘;’

苟发非常文件,可以用cpio,也可以用这样的语法:
find dir -name filename -print | cpio -pdv newdir

6)查找2004-11-30 16:36:37时时转了之公文
# A=`find ./ -name “*php”` | ls -l –full-time $A 2>/dev/null |
grep “2004-11-30 16:36:37”


 

UNDEF_SYM=`arm-linux-objdump -x lib_generic/libgeneric.a
board/100ask24x0/lib100ask24x0.a
cpu/arm920t/libarm920t.a cpu/arm920t/s3c24x0/libs3c24x0.a
lib_arm/libarm.a fs/cramfs/libcramfs.a fs/fat/libfat.afs/fdos/libfdos.a
fs/jffs2/libjffs2.a fs/reiserfs/libreiserfs.a
fs/ext2/libext2fs.a net/libnet.a disk/libdisk.a rtc/librtc.a
dtt/libdtt.a drivers/libdrivers.a
drivers/nand/libnand.a drivers/nand_legacy/libnand_legacy.a
drivers/usb/libusb.a drivers/sk98lin/libsk98lin.a common/libcommon.a

 |sed -n -e ‘s/.*\(__u_boot_cmd_.*\)/-u\1/p’|sort|uniq`;\

cd /work/system/u-boot-1.1.6 &&
arm-linux-ld
-Bstatic -T /work/system/u-boot-1.1.6/board/100ask24x0/u-boot.lds -Ttext
0x33F80000
$UNDEF_SYM cpu/arm920t/start.o \
–start-group
lib_generic/libgeneric.a board/100ask24x0/lib100ask24x0.a
cpu/arm920t/libarm920t.a cpu/arm920t/s3c24x0/libs3c24x0.a
lib_arm/libarm.a
fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a
fs/jffs2/libjffs2.a
fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a net/libnet.a
disk/libdisk.a
rtc/librtc.a dtt/libdtt.a
drivers/libdrivers.a
drivers/nand/libnand.a
drivers/nand_legacy/libnand_legacy.a
drivers/usb/libusb.a
drivers/sk98lin/libsk98lin.a
common/libcommon.a
–end-group -L
/work/tools/gcc-3.4.5-glibc-2.3.6/lib/gcc/arm-linux/3.4.5 -lgcc \
-Map u-boot.map -o u-boot


于第263履与266履就是于制作elf格式的u-boot,
其中$(LIBS)$(__LIBS)即使是仓库文件,$(LD)也连日来选项,$(__OBJS)也对象文件,
 $(LDFLAGS)指定程序的布局及地址,为”/work/system/u-boot-1.1.6/board/100ask24x0/u-boot.lds
-Ttext 0x33F80000 …”

 

4.board/100ask24x0/u-boot.lds文件如下所示:

 

    OUTPUT_ARCH(arm)                        //设置输出文件的体系架构。
    ENTRY(_start)                           //将_start这个全局符号设置成入口地址,进行复位初始化
SECTIONS                                        //输出文件的内容布局
{
. = 0x00000000;                                 //指定地址0x00000000,最终运行地址在0x33F80000+0x00000000

. = ALIGN(4);                                   //代码以4字节对齐
.text :                                         //指定.text section段(位于0x33F80000) 
{
cpu/arm920t/start.o (.text)                 //添加第一个目标文件cpu/arm920t/start.o里面的.text代码段
board/100ask24x0/boot_init.o (.text)            //添加第二个目标文件board/100ask24x0/boot_init.o里面的.text代码段
*(.text)                                        //*(.data) 表示添加剩下的全部文件的.text代码段
}

. = ALIGN(4);
.rodata : { *(.rodata) }                        //指定.rodata section段(位于0x33F80000+.text section),将所有的.rodata只读数据段合并成一个.rodata只读数据段

. = ALIGN(4);
.data : { *(.data) }                            //指定读写数据段

. = ALIGN(4);
.got : { *(.got) }                             //指定got段,got段是uboot自定义的一个段

. = .;
__u_boot_cmd_start = .;                        //把__u_boot_cmd_start赋值为当前位置, 即起始位置
.u_boot_cmd : { *(.u_boot_cmd) }               // u_boot_cmd段,所有的u-boot命令相关的定义都放在这个位置
__u_boot_cmd_end = .;                          // *u_boot_cmd段结束位置

. = ALIGN(4);
__bss_start = .;                               //把__bss_start赋值为当前位置,即bss段的开始位置
.bss : { *(.bss) }                             //指定bss段,这里NOLOAD的意思是这段不需装载,仅在执行域中才会有这段
_end = .;                                      //把_end赋值为当前位置,即bss段的结束位置
}

 

相关文章