当前位置:首页 » 编程软件 » lds链接脚本

lds链接脚本

发布时间: 2022-08-14 16:20:24

❶ uboot pwm的时钟怎么配置

首先做的是执行这样一条指令
例如:
make s3c2440_config
这条指令实际上是指向了一条更长的指令
这条指令在uboot根目录下的makefile中自己定义的,跟你的开发板相关;
s3c2440_config:unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t s3c2440 NULL s3c24x0
这条指令指向的执行文件是MKCONFIG
通过阅读MKCONFIG 文件源码我们可以看出。MKCONFIG有如下作用
第一:确定开发板的名字就是BOARD_NAME
-n) shift ; BOARD_NAME =" ${1%%_config}";shift;;
第二:创建到平台/开发板的头文件的链接
ln -s asm-$2 asm
$2 便是我们第一条指令传递出来的arm,
还有如下代码
ln -s ${LNPREFIX}arch-$6 asm-$2/arch
这样s3c24x0也发挥作用了。
第三:创建顶层Makefile包含的文件include/config.mk
第四:创建开发板相关的头文件 include/config.h
在config.h这个文件里,存放的是开发板的配置信息。
只有以下两类宏
(1)一类是选项CONFIG开头,用来选择CPU,SOC,开发板类型,设置系统时钟,选择设备驱动
(2)另一类是参数 用CFG来开头,如设置malloc缓冲池的大小,U-boot的提示符,u-boot下载文件的默认加载地址,flash的起始地址。
开发板的第一个参数,将编译文件分别指向了/board/$board_name and cpu/$cpu/
所以才会产生如下的编译结果。
(1)首先编译/board/$board_name/start.S,对于不同的CPU,还可能编译cpu/$(CPU)下的其他文件。
(2)然后,对于平台/开发板相关的每个目录、每个通用目录都使用它们各自的Makefile生成相应的库。
(3)将1,2步骤生成的.o、.a文件安装board/$(BOARDDDIR)/U-boot.lds连接脚本进行连接。
(4)第3步得到的是ELF格式的u-boot,后面Makefile还会将它转换为二进制格式,s_Record格式。

❷ (ARM + linux)GNU链接脚本中的".ARM.attributes"是什么意思

所谓gnu链接脚本,其实一般都是lds脚本,或者说是elf格式的bin文件组成的脚本文件,主要是告诉你代码是怎么排列在elf文件终,至于为啥要烧到arm,其实一般都烧录在flash中的,然后arm引导程序启动就需要从flash获取机器猫,也就是你说的那些段,常见的有data,bss,text,rely等

❸ linux 下的lds链接脚本有没有什么书籍

Linux下有两个清屏命令: clear 这个命令将会刷新屏幕,本质上只是让终端显示页向后翻了一页,如果向上滚动屏幕还可以看到之前的操作信息。一般都会使用这个命令。 reset 这个命令将完全刷新终端屏幕,之前的终端输入操作信息将都会被清空,这样虽然比较清爽,但整个命令过程速度有点慢,使用较少。

❹ gcc编译程序时怎么连接.lds

有两种使用方法:

1,lds作为外置脚本,参与对gcc链接过程的控制。使用方法为
gcc XXX.c XX.lds。
gcc能够自动识别你的文件列中后缀不能识别的文件,作为链接脚本使用。这样编译出来的程序,还是要使用gcc默认的lds脚本,你的脚本只是一个辅助。

2,lds代替系统的脚本。
这种要先使用gcc -c参数编译你的源程序,编译出来的.o文件,使用命令ld -T来指定lds文件链接到一起。

❺ 请问arm-linux-gcc和arm-linux-ld还有arm-linux-obj之间是什么关系

arm-linux-ld 是连接器,它把一些目标和归档文件结合在一起,重定位数据,并连接符号引用。通常,建立一个新编译程序的最后一步就是调用ld。

arm-linux-gcc -wall -O2 -c -o $@ $<
-o 只激活预处理,编译,和汇编,也就是他只把程序做成obj文件
-Wall 指定产生全部的警告信息
-O2 编译器对程序提供的编译优化选项,在编译的时候使用该选项,可以使生成的执行文件的执行效率提高
-c 表示只要求编译器进行编译,而不要进行链接,生成以源文件的文件名命名但把其后缀由 .c 或 .cc 变成 .o 的目标文件
-S 只激活预处理和编译,就是指把文件编译成为汇编代码
arm-linux-ld 直接指定代码段,数据段,BSS段的起始地址
-Tbss ADDRESS Set address of .bss section

-Tdata ADDRESS Set address of .data section

-Ttext ADDRESS Set address of .text section
示例:
${CROSS}ld -Ttext=0x33000000 led.o -o led.elf
使用连接脚本设置地址:
arm-linux-ld -Tbeep.lds start.o beep.o -o beep.elf
其中beep.lds 为连接脚本如下:
arm-linux-obj被用来复制一个目标文件的内容到另一个文件中,可用于不同源文件的之间的格式转换
示例:
arm-linux-obj –o binary –S elf_file bin_file
常用的选项:
input-file , outflie
输入和输出文件,如果没有outfile,则输出文件名为输入文件名
2.-l bfdname或—input-target=bfdname
用来指明源文件的格式,bfdname是BFD库中描述的标准格式名,如果没指明,则arm-linux-obj自己分析
3.-O bfdname 输出的格式
4.-F bfdname 同时指明源文件,目的文件的格式
5.-R sectionname 从输出文件中删除掉所有名为sectionname的段
6.-S 不从源文件中复制重定位信息和符号信息到目标文件中
7.-g 不从源文件中复制调试符号到目标文件中
arm-linux-objmp
查看目标文件(.o文件)和库文件(.a文件)信息
arm-linux-objmp -D -m arm beep.elf > beep.dis
-D 显示文件中所有汇编信息
-m machine

指定反汇编目标文件时使用的架构,当待反汇编文件本身没有描述架构信息的时候(比如S-records),这个选项很有用。可以用-i选项列出这里能够指定的架构.
[guowenxue@localhost asm_c_buzzer]$ cat beep.lds
/***********************************************************************
* File: beep.lds
* Version: 1.0.0
* Copyright: 2011 (c) Guo Wenxue <[email protected]>
* Description: Cross tool link text, refer to u-boot.lds
* ChangeLog: 1, Release initial version on "Mon Mar 21 21:09:52 CST 2011"
*
**********************************************************************/
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS{
. = 0x33000000;
.text : {

*(.text)
*(.rodata)
}

.data ALIGN(4): {

*(.data)

}
.bss ALIGN(4): {

*(.bss)

}

}

[guowenxue@localhost asm_c_buzzer]$ cat makefile

# ***********************************************************************

# * File: makefile

# * Version: 1.0.0

# * Copyright: 2011 (c) Guo Wenxue <[email protected]>

# * Description: Makefile used to cross compile the ASM and C source code

# * ChangeLog: 1, Release initial version on "Mon Mar 21 21:09:52 CST 2011"

# *
# ***********************************************************************
CROSS = /opt/buildroot-2011.02/arm920t/usr/bin/arm-linux-
CFLAGS =
beep.bin: start.S beep.c
arm-linux-gcc $(CFLAGS) -c -o start.o start.S

arm-linux-gcc $(CFLAGS) -c -o beep.o beep.c

arm-linux-ld -Tbeep.lds start.o beep.o -o beep.elf

arm-linux-obj -O binary -S beep.elf beep.bin

rm -f *.elf *.o
install:
cp beep.bin ~/winxp -f --reply=yes
clean:
rm -f *.elf *.o
rm -f beep.bin

❻ 请问后缀为.ld的文件是什么文件

链接脚本通常的名字叫做*.lds *.ld,或者是ld.*

❼ linux lds 脚本是直接生成吗

Linux中,周期执行的任务一般由cron这个守护进程来处理ps-ef|grepcroncron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“crontable”的简写。一、cron在3个地方查找配置文件(设置shell脚本):1、/var/spool/cron/yanggang这个目录下存放的是每个用户(包括root)的crontab任务,每个任务以创建者的名字命名,比如用户tom建的crontab任务对应的文件就是/var/spool/cron/tomyanggang@barry$sudols-l/var/spool/cron/(或有时是/var/spool/cron/crontabs/)-rw-------1rootcrontab10712011-09-1917:20root-rw-------1yanggangcrontab11762011-09-2411:07yanggang一般一个用户最多只有一个crontab文件(如:root,yanggang等),其对应日志在/var/spool/mail/root(或/var/spool/mail/yanggang)文件里2、/etc/crontab这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab。SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/#.----------------minute(0-59)#|.-------------hour(0-23)#||.----------dayofmonth(1-31)#|||.-------month(1-12)ORjan,feb,mar,apr#||||.----dayofweek(0-6)(Sunday=0or7)OR#sun,mon,tue,wed,thu,fri,sat#|||||#*****commandtobeexecuted例如:*/5****root/usr/libexec/atrunminute:代表一小时内的第几分,范围0-59。hour:代表一天中的第几小时,范围0-23。mday:代表一个月中的第几天,范围1-31。month:代表一年中第几个月,范围1-12。wday:代表星期几,范围0-7(0及7都是星期天)。who:要使用什么身份执行该指令,当您使用crontab-e时,不必加此字段。command:所要执行的指令。3、/etc/cron.d/这个目录用来存放任何要执行的crontab文件或脚本。二、权限crontab权限问题到/var/adm/cron/下一看,文件cron.allow和cron.deny是否存在用法如下:1、如果两个文件都不存在,则只有root用户才能使用crontab命令。2、如果cron.allow存在但cron.deny不存在,则只有列在cron.allow文件里的用户才能使用crontab命令,如果root用户也不在里面,则root用户也不能使用crontab。3、如果cron.allow不存在,cron.deny存在,则只有列在cron.deny文件里面的用户不能使用crontab命令,其它用户都能使用。4、如果两个文件都存在,则列在cron.allow文件中而且没有列在cron.deny中的用户可以使用crontab,如果两个文件中都有同一个用户,以cron.allow文件里面是否有该用户为准,如果cron.allow中有该用户,则可以使用crontab命令。AIX中普通用户默认都有crontab权限,如果要限制用户使用crontab,就需要编辑/var/adm/cron/cron.denyHP-UNIX中默认普通用户没得crontab权限,要想放开普通用户的crontab权限可以编三、创建cron脚本第一步:写cron脚本文件,命名为crontest.cron。15,30,45,59****echo"xgmtest..">>xgmtest.txt表示,每隔15分钟,执行打印一次命令第二步:添加定时任务。执行命令“crontabcrontest.cron”。搞定第三步:"crontab-l"查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本四、cron服务cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。/sbin/servicecrondstart//启动服务/sbin/servicecrondstop//关闭服务/sbin/servicecrondrestart//重启服务/sbin/servicecrondreload//重新载入配置/sbin/servicecrondstatus//查看服务状态例如:使用sudo停止与启动服务yanggang@barry$sudoservicecronstopcronstop/waitingyanggang@barry$sudoservicecronstartcronstart/running,process7502五、crontab用法crontab命令用于安装、删除或者列出用于驱动cron后台进程的表格,用户把需要执行的命令序列放到crontab文件中以获得执行。每个用户都可以有自己的crontab文件,/var/spool/cron下的crontab文件不可以直接创建或者直接修改,该crontab文件是通过crontab-e命令创建的在crontab文件中如何输入需要执行的命令和时间,该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔。格式如下:minutehourday-of-monthmonth-of-yearday-of-weekcommands合法值00-5900-2301-3101-120-6(0issunday)除了数字还有几个个特殊的符号就是"*"、"/"与"-"、",",*代表所有的取值范围内的数字"/"代表每的意思,"/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。-l在标准输出上显示当前的crontab。-r删除当前的crontab文件。-e使用VISUAL或者EDITOR环境变量所指的编辑器编辑当前的crontab文件。当结束编辑离开时,编辑后的文件将自动安装。几个例子:每天早上6点06***echo"Goodmorning.">>/tmp/test.txt//注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。每两个小时0*/2***echo"Haveabreaknow.">>/tmp/test.txt晚上11点到早上8点之间每两个小时和早上八点023-7/2,8***echo"Haveagooddream">>/tmp/test.txt每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点0114*1-3commandline1月1日早上4点0411*commandlineSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root//如果出现错误,或者有数据输出,数据作为邮件发给这个帐号HOME=/每小时(第一分钟)执行/etc/cron.hourly内的脚本01****rootrun-parts/etc/cron.hourly每天(凌晨4:02)执行/etc/cron.daily内的脚本024***rootrun-parts/etc/cron.daily每星期(周日凌晨4:22)执行/etc/cron.weekly内的脚本224**0rootrun-parts/etc/cron.weekly每月(1号凌晨4:42)去执行/etc/cron.monthly内的脚本4241**rootrun-parts/etc/cron.monthly注意:"run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。每天的下午4点、5点、6点的5min、15min、25min、35min、45min、55min时执行命令。5,15,25,35,45,5516,17,18***command每周一,三,五的下午3:00系统进入维护状态,重新启动系统。0015**1,3,5shutdown-r+5每小时的10分,40分执行用户目录下的innd/bbslin这个指令:10,40****innd/bbslink每小时的1分执行用户目录下的bin/account这个指令:1****bin/account每天早晨三点二十分执行用户目录下如下所示的两个指令(每个指令以;分隔):203***(/bin/rm-fexpire.lslogins.bad;bin/expire$#@62;expire.1st)每年的一月和四月,4号到9号的3点12分和3点55分执行/bin/rm-fexpire.1st这个指令,并把结果添加在mm.txt这个文件之后(mm.txt文件位于用户自己的目录位置)。12,5534-91,4*/bin/rm-fexpire.1st$#@62;$#@62;mm.txt六、几个问题crond进程没有运行1.启动crond进程/etc/init.d/crondstart2.开机自启动crond进程chkconfigcrondoncrontab编辑:输入编辑命令:crontab-e#mhdommondowcommandSHELL=/bin/bash30****cd/home/barry/top800/top10/top10_fruits/&&./top10_all.shCtrl+O(写入)——》enter键(保存文件名)——》Ctrl+X(退出)输入查看命令:crontab-l#mhdommondowcommandSHELL=/bin/bash30****cd/home/barry/top800/top10/top10_fruits/&&./top10_all.sh(建议使用此方式)语法错误:Syntaxerror:"("unexpected路径错误:在/var/spool/crontab/yanggang中,添加了如下命令,在日志文件/var/spool/mail/yanggang中提示找不到xxx.sh路径30****/home/barry/top800/top10/top10_fruits/top10_all.sh或30****bash/home/barry/top800/top10/top10_fruits/top10_all.sh这是因为在crontab中使用了绝对路径执行脚本top10_all.sh,因此在脚本top10_all.sh中引用的其它脚本也都需要使用绝对路径,才能被crontab找到并执行如何避免绝对路径复杂的设置呢,如上文六、几个问题所示,采用如下格式:30****cd/home/barry/top800/top10/top10_fruits/&&./top10_all.sh(建议使用此方式,先进入该目录,然后在执行脚本;否则,执行脚本中的其它脚本都需要加绝对路径)

❽ arm-linux程序的链接地址和原先地址

连接器脚本xxx.lds文件中指定的地址,就是链接地址,程序运行时必须位于它的链接地址处,汇编文件中的各个标号或者c文件中的各个函数名(函数的入口地址)对应的链接地址就是由链接脚本中的起始链接地址和各个目标文件(.s或.c文件编译但还为链接的文件)的排放顺序有关。这些链接地址可以通过查看可执行文件的反汇编文件即xxx.dis文件来获得.
如果你不使用全局变量或者静态变量,访问这些变量时要使用到链接地址,重定位完成之前不能使用这些类型的变量,adr、b和bl指令都是属于相对跳转指令,即在当前pc值的基础上加减一个偏移值,跳转去执行。如果只使用adr、b或者bl指令,并且不访问全局变量或者静态变量,这类代码被称为“位置无关码”,即代码的存储位置可以不在其链接地址处。如果当使用全局跳转指令ldr时就只能使用链接地址了,如ldr pc,_reset。程序运行时,pc指针的内容是不区分原本地址(存储地址)或链接地址的,只要是”位置无关码“,存储地址可以与链接地址不同,不是位置无关码就要使用到链接地址,即存储地址与链接地址必须相同。即使用之前必须完成代码的重定位。

ps:望采纳!

❾ uboot进行重定位是为什么

首先你要明白代码要执行必须先放到内存中,而bin文件中的各个函数和变量的存放位置关系是与链接脚本文件和编译器决定的,程序运行时必须位于它的链接地址处,汇编文件中的各个标号或者c文件中的各个函数名(函数的入口地址)对应的链接地址就是由链接脚本中的起始链接地址和各个目标文件(.s或.c文件编译但还为链接的文件)的排放顺序有关。这些链接地址可以通过查看可执行文件的反汇编文件即xxx.dis文件来获得.
重地位就是将uboot的bin文件复制到内存中它对应的链接地址处,而这个链接地址就是链接脚本xx.lds中的起始链接地址,这样在使用全局跳转指令(ARM中的ldr xxx指令)或中C语言中的函数调用时,pc寄存器才能被赋予正确的值,即才能到内存中
正确的位置处取出代码并执行。

ps:望采纳!

热点内容
安卓咪咕音乐怎么录制视频 发布:2024-05-19 07:56:06 浏览:837
如何搞出超大声的听声辨位安卓版 发布:2024-05-19 07:46:21 浏览:926
linux安全模式 发布:2024-05-19 07:27:25 浏览:175
为什么安卓手机安装不了cpk 发布:2024-05-19 07:22:21 浏览:312
pythonempty 发布:2024-05-19 07:15:16 浏览:928
路由器虚拟服务器搭建 发布:2024-05-19 07:15:15 浏览:998
方舟编译器何时推送 发布:2024-05-19 07:15:10 浏览:597
魔兽世界自动钓鱼脚本 发布:2024-05-19 06:43:07 浏览:495
cbs加密 发布:2024-05-19 06:29:56 浏览:202
ssis存储过程 发布:2024-05-19 06:21:31 浏览:632