ARM系统移植习题

ARM系统移植

1、ARM的Cortex-A处理器总共__40__个寄存器,System模式下使用__17__个寄存器。
2、在用ARM汇编编程是,其寄存器有多个别名,通常PC是指_R15_,LR 是指__R14__,SP是指__R13__。
3、ARM嵌入式系统中,PC指向的是正在( 执行 )的指令地址。
4、下列二进制工具哪个是用来把程序地址转换为文件名和行号的( D )
A nm
B objdump
C objcopy
D addr2line
5、当console初始化以后,一般最为简单的内核调试方式为 ( A )
A printk
B puts
C bdi2000
D kgdb
6、下列二进制工具哪个是用来进行目标格式转换的( C )
A nm
B objdump
C objcopy
D string
7、下列不占用任何磁盘空间的文件系统是( D )
A yaffs2
B jffs2
C cramfs
D tmpfs
8、针对当前我们移植的项目,主机侧tftp共享目录和nfs共享目录,描述正确的是( AB )
A tftp共享目录,存放的是供目标板下载的文件
B nfs共享目录,存放的是供目标板子系统挂载的根文件系统
C tftp和nfs都是提供给uboot使用的
D tftp共享目录和nfs共享目录是不一样的,不能设置成同一目录
9、u-boot下通过nfs自启动,需要设置哪些环境变量( ABC )
A ipaddr
B serverip
C bootcmd
D bootargs
10、简述 static和volatile 关键字的含义和作用。

1、  c语言中static关键字有两个作用,一是文件作用域,二是函数作用域。
(1)文件作用域关键字static的作用是,以static申明的全局变量、函数不得被其他文件所引用
(2)static另外一个用途是函数内部静态变量,只会被初始化一次,而且变量存储在全局数据段中而不是函数栈中,所以其生命期会一直持续到程序退出
2、  一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份

11、简述ARM发生异常时,ARM核心会自动做哪些事情?从异常返回时,我们要做哪些事情?

当异常产生时, ARM core:
        1. 拷贝 CPSR 到 SPSR_<mode>
        2. 设置适当的 CPSR 位:
            1>改变处理器状态进入 ARM 状态
            2>改变处理器模式进入相应的异常模式
            3>设置中断禁止位禁止相应中断 (如果需要)
        3. 保存返回地址到 LR_<mode>
        4. 设置 PC 为相应的异常向量
3、  返回时, 异常处理需要:
1. 从 SPSR_<mode>恢复CPSR
2. 从LR_<mode>恢复PC
Note:这些操作只能在 ARM 态执行.
</mode></mode></mode></mode>

12、简述嵌入式linux系统移植的主要内容有哪些?配置内核与编译内核镜像的命令分别是什么?

Bootloader  kernel  rootfs
 
make menuconfig
make uImage

13、列出U-Boot常见命令的名称及作用?

printenv 或 pri:打印环境变量
setenv:添加、修改、删除环境变量
saveenv:保存环境变量到固态存储器中,重启后也有效
ping:测试和主机的网络连接
tftpboot:从TFTP服务器上下载文件到开发板的内存中
loadb:通过串口下载文件到开发板的内存中
mmc list:列出可用的mmc设备
mmc dev:查看或设置当前操作的mmc设备
mmc partconfe:MMC的PARTITION_CONFIG设置,主要用于切换分区
mmc bootbuse:MMC的BOOT_BUS_WIDTH设置,设置引导时的总线宽度。
mmc read:读取mmc的相应块到内存中
mmc write:将内存中的数据写入到mmc的相应块
go:跳转到指定位置运行程序
boot:运行bootcmd环境变量中的命令
bootm:启动Linux内核
run:运行环境变量中的命令

14、以你所学的平台为例,第一次配置内核时,应使用的缺省内核配置文件是什么?

arch/arm/configs/exynos_defconfig

15、printk支持几种打印级别?

默认设置是7   4   1   7

# cat /proc/sys/kernel/printk

7       4       1      7

该文件有四个数字值,它们根据日志记录消息的重要性,定义将其发送到何处。关于不同日志级别的更多信息,请查阅syslog(2)联机帮助。上面显示的4个数据分别对应:

控制台日志级别:优先级高于该值的消息将被打印至控制台

默认的消息日志级别:将用该优先级来打印没有优先级的消息

最低的控制台日志级别:控制台日志级别可被设置的最小值(最高优先级)

默认的控制台日志级别:控制台日志级别的缺省值

 

数值越小,优先级越高

其实这四个值是在kernel/printk.c 中被定义的,如下:

int console_printk[4] = {
                DEFAULT_CONSOLE_LOGLEVEL,       /* console_loglevel */

                DEFAULT_MESSAGE_LOGLEVEL,       /* default_message_loglevel */

                MINIMUM_CONSOLE_LOGLEVEL,     /* minimum_console_loglevel */

                DEFAULT_CONSOLE_LOGLEVEL,       /* default_console_loglevel */

};

16、使用Kconfig语法写一个选项,选项名称为“setup” 默认值为y

config TEST-----TEST可用任意内容替代
bool “setup” ---bool可用tristate替代
default y
---help---

17、你只需要使用CMP、SUB和B指令,充分使用条件执行!

注:条件码EQ:相等 NE:不相等 GT:带符号数大于 LT:带符号数小于

文本框:
.global _start

_start:

   MOV r0, #9

   MOV r1, #15

Loop:

   @你的代码段

stop:

   B stop

   .end
cmp r0, r1
    beq stop
    subgt r0, r0, r1
    sublt r1, r1, r0
b loop
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值