如何编译linux内核编译 cr7

> 新闻详情
康耐视视觉库实现在 Linux 系统上的使用!
发布日期:
浏览次数:25176
世界领先的系统供应商 - 康耐视公司(纳斯达克:CGNX)宣布 Linux 现已支持世界上最畅销的机器视觉工具组合 - 康耐视视觉库 (CVL)。视觉软件副总裁兼业务部门经理 Markku Jaaskelainen 博士表示:&这将为我们的产品打开新的市场,使用 Linux 平台的机器制造商将能够与多年来使用 Microsoft Windows& 的原始设备制造商一样,使用相同的康耐视机器视觉工具。有了 Linux,他就可以在重要机器控制应用中实现更可预见的性能。这也为他们提供了更强大的能力来为坚持使用 Copy Exactly! 程序的最终用户管理操作系统补丁和升级。&
新版 CVL 7.0 CR7 支持 Linux 内核 2.6 及更新的版本,还可以与 Debian、Fedora、Red Hat 和 Ubuntu 发行版本配合使用。它使用 XLIB 图形库用于显示,并直接支持最新的 GigE 摄像头。康耐视的图像采集 SDK 可让用户集成其他摄像头接口,如 USB 和 CameraLink。
Linux 在高速、精密制造方面为机器制造商提供众多优势,包括更确定的行为和更好地控制操作系统升级。它还可用于多种微处理器,包括那些在低成本处理器板上的微处理器。
CVL 是康耐视的最高性能机器视觉库,使用一个用于数百个功能强大的视觉工具的面向对象的 C++ 应用程序接口。 它针对的是必须满足最苛刻性能要求的专业视觉程序员。它包括 PatMax&、PatInspect&和其他康耐视校准、检测和 ID 工具,以及用于半导体、、PV 太阳能和触摸屏显示器检测制造的特定应用套件。
现在即可提供 CVL 7.0 CR7。更多信息,请访问 /contactus。
关于康耐视
康耐视公司设计、研发、生产和销售机器视觉和工业 ID 系统,即有&视觉&的电脑。康耐视的视觉和 ID 系统在全球范围内的整个生产和分销过程中的多种检验、识别和引导应用中被广泛使用。作为全球领先的机器视觉和工业 ID 公司,康耐视自从 1981 年成立以来,已经销售了 60 多万套机器视觉系统,累计利润超过 30 亿美元。康耐视总部设在美国马萨诸塞州 Natick 镇,在北美、日本、欧洲、亚洲和拉丁美洲设有地区办事处和经销处。更多详情,请登录公司网站:。
关于Moxa:
Moxa是工业联网、工业计算和远程自动化解决方案...
新闻排行榜
中自集团网络项目客户服务方案1.中自通会员尊享版:18,888元;2.CA168首...
版权所有∶中自网 经营许可证编号∶arm编译linux内核(2)
&&&&&&&&&&&&&&&&图3-1
内核移植流程图
3.4.3内核移植的具体操作
内核移植步骤:
步骤1:拷贝linux-2.6.22.5内核压缩包到embedded目录中,并解压缩
[root@localhost
embedded]# tar xjvf
linux-2.6.22.5.tar.bz2
步骤2:进入linux-2.6.22.5目录中
[root@localhost
embedded]# cd linux-2.6.22.5/
步骤3:修改Makefile文件
[root@localhost
linux-2.6.22.5]# vi Makefile
?= $(SUBARCH)
#CROSS_COMPILE
CROSS_COMPILE
?= /usr/local/arm/3.4.1/bin/arm-linux-
步骤4:执行
menuconfig 配置内核
[root@localhost
linux-2.6.22.5]# make menuconfig
注意:可以尝试使用命令make xconfig ,配置会更方便,通常有4种主要的内核配置方法。
命令行方式,配置相对繁琐。
&使用一个已有的.config配置文件,提示行会提示之前没有配置过的选项,相对较简单。
3.make menuconfig
&基于文本图形化终端配置菜单,是目前最广泛使用的配置内核方法。
&基于X窗口的配置菜单,用户可以通过图形界面和鼠标进行配置。
修改如下相关内容,要注意选的是
Initial RAM
filesystem and RAM disk (initramfs/initrd)
System Type
ARM system type (ARM Ltd. Versatile family)
(X) ARM Ltd. Versatile family
& 改成(X) Samsung S3C2410, S3C2412, S3C2413, S3C2440,
S3C2442, S3C2443
& 再在ARM system type (Samsung S3C2410, S3C2412,
S3C2413, S3C2440, S3C2442, S3C2443)
[ ] S3C2410 DMA support (NEW)
S3C2410 DMA
S3C2410 Machines
[ ] SMDK0 (NEW)
Boot options
Default kernel command string
& 改成(console=ttySAC0 root=/dev/ram init=/linuxrc)
Default kernel command string
Character devices
Serial drivers
& & Samsung
S3C0/S3C2 Serial port support
&改成&*& Samsung
S3C0/S3C2 Serial port
Support for console on S3C2410 serial port
LED devices
[ ] LED Support (NEW)
LED Class Support
& & LED Support for Samsung S3C24XX
GPIO LEDs (NEW)
&&&改成&M&
LED Support for Samsung S3C24XX GPIO LEDs
[ ] LED Trigger support (NEW)
LED Trigger
LED Timer Trigger
LED Heartbeat Trigger
Multimedia devices
&M& Video For
& Video For Linux
DAB adapters
] DAB adapters
Graphics support
& & S3C2410 LCD framebuffer support
&&&改成&M&
S3C2410 LCD framebuffer support
Console display driver support
console (NEW)
&改成[ ] VGA text console
& & Framebuffer Console support
&改成&M& Framebuffer
Console support
Framebuffer Console Rotation
compiled-in fonts
VGA 8x16 font
Mini 4x6 font
[ ] Bootup logo (NEW)
上述的修改是必须的,下面的修改是根据需要进行的。
Code maturity
level options
Prompt for
development and/or incomplete code/drivers
& 改成[ ] Prompt for development and/or incomplete
code/drivers
Floating point
[ ] NWFPE math emulation (NEW)
NWFPE math
Support extended precision
& & Memory Technology Device (MTD)
& 改成&M& Memory
Technology Device (MTD) support
MTD partitioning support (NEW)
MTD partitioning support
RAM/ROM/Flash chip drivers
& & Detect flash chips by Common
Flash Interface (CFI) probe (NEW)
&改成&M& Detect flash
chips by Common Flash Interface (CFI) probe
& & Support for Intel/Sharp flash
chips (NEW)
&改成&M& Support for
Intel/Sharp flash chips
& & Support for RAM chips in bus
mapping (NEW)
&改成&M& Support for RAM
chips in bus mapping
& & Support for ROM chips in bus
mapping (NEW)
&改成&M& Support for ROM
chips in bus mapping
Mapping drivers for chip access
& & Map driver for platform device
RAM (mtd-ram) (NEW)
&改成&M& Map driver for
platform device RAM (mtd-ram)
Self-contained MTD device drivers
& & Physical system RAM
&改成&M& Physical system
& & MTD using block device
&改成&M& MTD using block
Parallel port support
&M& Parallel port
& Parallel port support
SCSI device support
&M& SCSI device
& SCSI device support
Multi-device support (RAID and LVM)
devices driver support (RAID and LVM)
] Multiple devices driver support (RAID and
ISDN subsystem
&M& ISDN support
& ISDN support
Input device support
Joystick interface
Joystick interface
Touchscreen interface (NEW)
&&&改成&M&
Touchscreen interface
Horizontal screen resolution
Vertical screen resolution
Touchscreens (NEW)
Touchscreens
Philips UCB1400 touchscreen (NEW)
Philips UCB1400 touchscreen
File systems
Miscellaneous filesystems
& & Journalling Flash File System v2
(JFFS2) support (NEW)
&&&改成&M&
Journalling Flash File System v2 (JFFS2)
Advanced compression options for JFFS2
内核移植关键的步骤就在于配置哪些选项是必须选择,哪些选项是不用选的。实际上在配置时,大部分选项可以使用其默认值,只有少部分需要根据用户不同的需要选择。选择的原则,是将与内核其它部分关系较远且不经常使用的部分功能代码编译成可加载模块,有利于减小内核的大小,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响。不需要的功能就不选,与内核关系紧密而且经常使用的部分功能代码直接编译到内核中。
步骤5:执行make
dep检查依赖关系
[root@localhost
kernel]# make dep
步骤6:生成zImage内核镜像文件
[root@localhost
kernel]# make zImage
1.make dep应用在内核2.4或之前,在2.6内核中已取消该命令。
2.make clean删除前面留下的中间文件,该命令不会删除.config等配置文件。
3.make zImage 编译生成gzip压缩形成的image文件。
4.make bzImage编译生成较大一点的内核文件。
5.生成的zImage文件在arch/arm/boot/
步骤7:复制zImage
zImage文件复制到/tftpboot目录中
[root@localhost
kernel]# cp arch/arm/boot/zImage
/tftpboot/
步骤8:测试生成的新内核能否启动
在另一终端中打开minicom,复位开发板,进入PPCBoot的命令行界面,执行下面两行语句
SMDK2410 #setenv
bootargs console=ttySAC0 initrd=0x,0x
root=/dev/ram init=/linuxrc
SMDK2410 #tftp
0x zI go 0x
& 上述两行语句中的ttySAC0、0x部分,跟第一部分内核移植是不同的。
& 这里测试没有使用ramdisk文件系统,原因是前面移植的文件系统不能在这个内核下使用,需要移植更高版本的busybox才能使用。
出现如下信息,就表明内核能够运行在开发板上了。
Uncompressing
Linux.....................................................................
done, booting t.Linux version 2.6.22.5 ()
(arm-linux-gcc version 3.4.1) #7 Sun Sep 2 14:24:43 CST
CPU: ARM920T
[] revision 0 (ARMv4T), cr=c0007177
ATAG_INITRD is
please update your bootloader.
Memory policy: ECC
disabled, Data cache writeback
CPU S3C2410 (id
S3C2410: core
202.800 MHz, memory 101.400 MHz, peripheral 50.700
S3C24XX Clocks,
(c) 2004 Simtec Electronics
& 当然,对于实际的应用当中的内核移植,需要根据实际需要,对某些选项进行裁剪,以使生成的内核文件尽可能小。当裁剪好的内核满足应用需要后,就可以烧写到目标板上了。
1、简述Linux源代码各目录中的内容,
2、分析make
config、make menuconfig、make
xconfig三个linux内核配置界面的区别
3、指出linux内核编译命令make,make zImage, ma
bz俄Image的区别
4、下载一个Linux
2.6内核,查看它们的内核各项配置项的内容。
5、请针对内核的目录绘制一个树形结构图?请分析Linux内核面临许多新的变化是怎么将内核组织的很简洁和具有很好的扩展性。
6、简述将新增设备驱动源代码添加到linux内核中的步骤
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。整数存储指令
整数存储指令如表1所示。
表1 整数存储指令
语法格式
字节存储(偏移地址寻址)
字节存储(寄存器寻址)
记录有效地址的字节存储(偏移地址寻址)
记录有效地址的字节存储(寄存器寻址)
半字存储(偏移地址寻址)
半字存储(寄存器寻址)
记录有效地址的半字存储(偏移地址寻址)
记录有效地址的半字存储(寄存器寻址)
字存储(偏移地址寻址)
字存储(寄存器寻址)
记录有效地址的字存储(偏移地址寻址)
记录有效地址的字存储(寄存器寻址)
的指令都是将寄存器中值存储到存储器(内存等)
字节存储指令(偏移地址寻址)
有效地址(EffectAddr)为的内容加,的低位内容存储到有效地址为的存储器中。
字节存储指令(寄存器寻址)
有效地址为的内容加上的内容,的低位内容存储到有效地址为的存储器中。
记录有效地址的字节存储指令(偏移地址寻址)
有效地址=()+,的低位内容存储到有效地址为的存储器中。=,如果=,则指令无效。
记录有效地址的字节存储指令(寄存器寻址)
有效地址=()+(),的低位内容存储到有效地址为的存储器中,=,如果=,则指令无效。
半字存储指令(偏移地址寻址)
有效地址=()+,的低位内容存储到有效地址为的存储器中。
记录有效地址的半字存储指令(偏移地址寻址)
有效地址=()+,的低位内容存储到有效地址为的存储器中。=,如果=,则指令无效。
字存储指令(偏移地址寻址)
有效地址=()+,的位内容存储到有效地址为的存储器中。
记录有效地址的字存储指令(偏移地址寻址)
有效地址=()+,的位内容存储到有效地址为的存储器中,=,如果=,则指令无效。
记录有效地址的字存储指令(寄存器寻址)
有效地址=()+(),的位内容存储到有效地址为的存储器中。=,如果=,则指令无效。
字存储指令(寄存器寻址)
有效地址=()+(),的位内容存储到有效地址为的存储器中。
、整数加载指令
整数加载指令如表2所示。
&&&&&&&&&&&&&&&&&&&&&& 表2 整数加载指令
语法格式
高位清零加载字节指令(偏移地址寻址)
高位清零的加载字节指令(寄存器寻址)
高位清零的加载字节并记录有效地址指令(偏移地址寻址)
高位清零的加载字节并记录有效地址指令(寄存器寻址)
高位清零的加载半字指令(偏移地址寻址)
高位清零的加载半字指令(寄存器寻址)
高位清零的加载半字并记录有效地址指令(偏移地址寻址)
高位清零的加载半字并记录有效地址指令(寄存器寻址)
加载半字指令(偏移地址寻址)
加载半字指令(寄存器寻址)
加载半字并记录有效地址指令(偏移地址寻址)
加载半字并记录有效地址指令(寄存器寻址)
加载字指令(偏移地址寻址)
加载字指令(寄存器寻址)
加载字并记录有效地址指令(偏移地址寻址)
加载字并记录有效地址指令(寄存器寻址)
指令从存储器(内存等)取数据加载到寄存器
;=()+。从存储器读取地址的内容,并加载低位到,的其他位清。不影响其他寄存器。
;=()+。从存储器读取地址一个字节的内容,并加载低位到,的其他各位清零,有效地址存放在中。
,, ;=()+()。从存储器读取地址一个字节的内容,并加载低位到,的其他各位清零,存放在中。如果=或者=,则指令无效。
,,;=()+()。从存储器读取地址一个字节的内容,并加载低位到,的其他各位清。
;=()+。从存储器处读取两个字节的数,并加载到的低位。的其他位填充最高位的值。
,, ;=()+()。从存储器处读取两个字节的数,并加载到的低位。的其他位填充最高位的值。
;=()+。从存储器处读取两个字节的数,并加载到的低位。的其他位填充最高位的值。存放在中,如果=或者=,则指令格式无效。
,, ;=()+()。从存储器处读取两个字节的数,并加载到的低位。的其他位填充最高位的值。存放在中,如果=或者=,则指令格式无效。
;=()+。从存储器处读取两个字节的数,并加载到的低位。的其他位清零。
;=()+。从存储器处读取两个字节的数,并加载到的低位。其他位清零。存入,如果=或者=,则指令格式无效。
,,;=()+()。从存储器处读取两个字节的数,加载到的低位,其他位清零。存入,如果=或者=,则指令格式无效。
,,;=()+(),从处读取两个字节的数,并加载到的低位,将的其他位清零。
,();=()+,从处读取个字节的数,并加载到。
,();=()+,从处读取个字节的数,并加载到。=,如果=或=,则指令格式无效。
,,;=()+(),从处读取个字节的数,并加载到。=,如果=或=,则指令格式无效。
,,;=()+(),从处读取个字节的数,并加载到。
整数多字存储加载指令
表整数多字存储加载指令
语法格式
,() ;=+。以起始的个连续的字加载到通用寄存器到处,=-。必须为的倍数,如果=,则指令格式无效。指令执行时间长。
,() ;=+。把通用寄存器从到,存储到以起始的个连续的字存储器,必须是的倍数。指令执行时间长。
表 分支控制指令
语法格式
无条件转移
条件转移(转移目标地址由指出)
条件转移(转移目标地址由指出)
无条件转移指令()
指令的编码格式:
指令的语法格式:
如果=,则转移目标地址为的值经符号位扩展后加上指令地址。(相对跳转)
如果=,则转移目标地址为的值经符号扩展后的值。(绝对地址跳转)
如果=,则转移指令下一条指令的有效地址存放到连接寄存器。
条件转移指令
指令编码格式:
条件跳转指令皆以 bc 开头,带 3 个操作数,如:
bc && BO, BI, BD
bca&&& BO, BI, BD
bcl&&& BO, BI, BD
bcla&& BO, BI, BD
后缀 a, l 的含义与 branch 类指令同。BO 指定跳转的条件,5 位;BI 指定关联的 CR 位,也是 5 位;BD 为跳转的立即数地址,16 位。
其中以 BO 的编码最为复杂(BO 从左到右编号为 0 ~ 4):
BO[0]: 为 1,则直接跳转
BO[1]: 为 1,则条件为真时,跳转。否则条件为假时,跳转
BO[2]: 为 1,则 CTR 不自动减 1
BO[3]: 为 1 时,则 CTR == 0 时跳转;为 0 时,则 CTR != 0 时跳转
BO[4]: 静态预测位,1 表示 unlikely,0 表示 likely
则常见的 BO 值:
0x14 (0b10100) 则表示无条件跳转
0x0c (0b01100) 则表示 CR 的某个位为 1 时跳转
0x04 (0b00100) 则表示 CR 的某个位为 0 时跳转
至于静态预测的策略位BO[4],
&&&&&&&&&&& 被置为 0(黄色)或 1 (绿色) ,则其行为为:
I.&& 目标地址小于当前指令地址,预测为 跳转
II.& 目标地址大于当前指令地址,预测为 不跳转
III. 对于目标地址在 CTR/LR 中的条件跳转指令,一律预测为 不跳转
可以给分支指令加一个 +/- 的后缀,来简化。加 '+' 的指令,一律预测为跳转。加 '-' 的分支指令,一律预测为不跳转。
则对于 b1,后缀 '+' 会将 y 位置 0,'-' 则将 y 位置 1。
对于 b2,后缀 '+' 会将 y 位置 1,'-' 则将 y 位置 0。
对于 b3,后缀 '+' 会将 y 位置 1,'-' 则将 y 位置 0。
BI 与关联 CR 位的关系为:
32 + BI
即,若 BI 为 2,则对应于 CR[34],即为 CR0[gt] 位。
以上针对 32 位的情形,对 64 位则使用指令 bce, bcea, bcel, bcela 功能与上同。
指令语法格式:
字段表示条件寄存器中的位用于转移条件。字段操作码定义见表。
表字段操作码定义
计数器减量,如果条件不成立则转移
计数器减量,如果条件不成立则转移
如果条件不成立,则转移
计数器减量,如果条件成立则转移
计数器减量,如果条件成立则转移
如果条件成立则转移
计数器减量,如果!=,则发生转移
计数器减量,如果=,则发生转移
注:位表示该位可以被忽略,位表示是不是条件转移
条件转移指令(转移目标地址由指出)
指令的编码格式:
指令的语法格式:
字段表示条件寄存器中的位用于转移条件。
字段操作码定义如表所示。
转移目标地址为。
如果=,则转移指令下一条有效地址存放到连接寄存器。
条件转移指令(转移目标地址由指出)
指令的编码格式:
指令的语法格式:
转移目标地址是。
如果=,则转移指令下一条指令的有效地址存放到连接寄存器。
如果减量计数器(),指令格式无效,则转移到目标地址。
特殊寄存器传送指令
特殊寄存器传送指令如表所示。
表特殊寄存器传送指令
语法格式
读取机器状态寄存器
写入机器状态寄存器
读取特殊功能寄存器
写入特殊功能寄存器
读取段寄存器
写入段寄存器
间接读取段寄存器
间接写入段寄存器
读取时基寄存器
读取机器状态寄存器指令
指令的编码格式:
指令的语法格式:
读取的内容放入中,这是超级用户层指令,不影响其他寄存器。
()写入机器状态寄存器指令
指令的编码格式:
指令的语法格式:
把的内容存入中,这是超级用户指令。
读取特殊功能寄存器指令
指令的编码格式:
指令的语法格式:
指令操作:
特殊功能寄存器()的编码如表所示,将的内容存入中。
写入特殊功能寄存器指令
指令的编码格式:
指令的语法格式:
把的内容存入到指定的特殊功能寄存器中。
读取段寄存器指令
指令的编码格式:
指令的语法格式:
指令操作:
将段寄存器的内容读入中,这是一个超级用户层指令。
写入段寄存器指令
指令的编码格式:
指令的语法格式:
将中的内容读入,这是一个超级用户层指令。
间接读取段寄存器指令
指令的编码格式:
指令的语法格式:
指令操作:
由寄存器的~位选取的段寄存器的内容,复制到。这是一个超级用户层指令。
间接写入段寄存器指令
指令的编码格式:
指令的语法格式:
指令操作:
()—()
将中的内容复制到由的~位所指定的寄存器中。这是一个超级用户层指令。
读取时基寄存器指令
指令的编码格式:
指令的语法格式:
指令操作:
该指令的编码如表所示。
表指令的编码
系统调用指令
系统调用指令
指令的编码格式:
指令的使用:
指令调用操作系统去执行服务程序。当控制返回到一个执行系统调用的程序时,寄存器的内容依赖于程序提供的系统所使用的寄存器的约定。
跟在指令后面的有效指令地址被放在中。中的位、~和~被放在中对应的位置,中位~和~被设置为未定义值。当异常产生,异常处理程序更改寄存器。异常处理程序到形成基址加偏移量形成的地址去取下一条指令。
受影响的寄存器有:
依赖于系统服务、、及。
中断返回指令
指令的编码格式:
指令操作:
中的位、~和~被放在中对应的位置。如果新的值没有使能任何未完的操作,则在的控制下,从地址取下一条指令。
指令的使用中受影响的寄存器为。
PowerPC汇编基础篇
PowerPC正用于和曾经用于 IBM服务器, 苹果电脑,任天堂Gamecube游戏机
Gekko 芯片用在了任天堂的 GameCube 中,Xenon 则用在了 Microsoft 的 Xbox 360中。Cell Broadband Engine 是近来崭露头角的一种体系结构,使用 PowerPC指令,并且具有八个向量处理器。Sony PlayStation 3 将使用 Cell,考虑到 PlayStation 3将用于广泛的多媒体应用程序,因此还使用为数众多的其他向量。
PowerPC 指令集比 POWER 处理器系列更加有用。指令集本身可以 64 位模式操作,也可以简化的 32位模式操作。POWER5 处理器支持这两种模式,POWER5 上的 Linux 发布版支持为 32 位和 64 位 PowerPC指令集而编译的应用程序。
应用程序二进制接口(ABI)
PPC32 Linux和NetBSD使用 SVR4 ABI
PPC64 Linux和AIX&& 使用 PowerOpenABi
1)传参数从 GPR3 开始
2)GPR3-GPR12 是容易失去的寄存器。如果需要,在调用子例程之前,必须先保存并在返回后恢复.
PowerPC 寄存器有编号,而没有名称。对于初学者来说,有时这会使人混淆,因为 tts无法轻易地与寄存器区分开。3可以表示数值3或者寄存器 gpr3 ,或者浮点 fpr3 ,或者特殊用途的寄存器 spr3。习惯了就好了。:)
但是,在GDB的反汇编中, 寄存器是用 r3 表示的
通用寄存器
r0 跟stack frame有关系, 当建立stack frame时,用来保存旧的LR
r1 stack pointer
r2 toc(table of content)指针
r3 第一个参数, 返回值也放在这个寄存器
r11 常用做指针
专用寄存器
lr   链接寄存器,它用来存放函数调用结束处的返回地址。
ctr   计数寄存器,它用来当作循环计数器,会随特定转移操作而递减。
xer   定点异常寄存器,存放整数运算操作的进位以及溢出信息。
msr   机器状态寄存器,用来配置微处理器的设定。
cr   条件寄存器,它分成8个4位字段,cr0-cr7,它反映了某个算法操作的结果并且提供条件分支的机制。
li REG, VALUE
加载寄存器 REG,数字为 VALUE
add REGA, REGB, REGC
将 REGB 与 REGC 相加,并将结果存储在 REGA 中
addi REGA, REGB, VALUE
将数字 VALUE 与 REGB 相加,并将结果存储在 REGA 中
mr REGA, REGB
将 REGB 中的值复制到 REGA 中
or REGA, REGB, REGC
对 REGB 和 REGC 执行逻辑 “或” 运算,并将结果存储在 REGA 中
ori REGA, REGB, VALUE
对 REGB 和 VALUE 执行逻辑 “或” 运算,并将结果存储在 REGA 中
and, andi, xor, xori, nand, nand, and nor
其他所有此类逻辑运算都遵循与 “or” 或 “ori” 相同的模式
ld REGA, 0(REGB)
使用 REGB 的内容作为要载入 REGA 的值的内存地址
lbz, lhz, and lwz
它们均采用相同的格式,但分别操作字节、半字和字(“z” 表示它们还会清除该寄存器中的其他内容)
跳转(或转移)到地址 ADDRESS 处的指令
bl ADDRESS
对地址 ADDRESS 的子例程调用
cmpd REGA, REGB
比较 REGA 和 REGB 的内容,并恰当地设置状态寄存器的各位
beq ADDRESS
若之前比较过的寄存器内容等同,则跳转到 ADDRESS
bne, blt, bgt, ble, and bge
它们均采用相同的形式,但分别检查不等、小于、大于、小于等于和大于等于
std REGA, 0(REGB)
使用 REGB 的地址作为保存 REGA 的值的内存地址
stb, sth, and stw
它们均采用相同的格式,但分别操作字节、半字和字
对内核进行系统调用
所有计算值的指令均以第一个操作数作为目标寄存器。在所有这些指令中,寄存器都仅用数字指定。例如,将数字12 载入寄存器 5 的指令是 li 5, 12。我们知道,5 表示一个寄存器,12 表示数字12,原因在于指令格式(因为li第一个操作数就是寄存器,第2个是立即数)。
在某些指令中,GPR0 只是代表数值 0,而不会去查找 GPR0的内容。
一个最简单的例子
.globl .main
保存为 simple.s
用gcc来汇编连接
$gcc simple.s -o simple
说明上次运行的程序,返回值是5
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:105058次
积分:1739
积分:1739
排名:第10025名
原创:32篇
转载:188篇
评论:10条
(5)(8)(3)(2)(1)(3)(2)(6)(2)(3)(4)(1)(1)(1)(1)(1)(3)(1)(7)(8)(3)(6)(2)(1)(2)(2)(2)(1)(1)(4)(1)(1)(1)(1)(1)(1)(2)(1)(1)(2)(1)(9)(2)(4)(8)(1)(1)(12)(10)(20)(5)(1)(2)(2)(2)(9)(2)(2)(2)(3)(3)(4)(1)(1)(1)(2)(1)(6)(6)(3)(1)

我要回帖

更多关于 嵌入式linux内核编译 的文章

 

随机推荐