摘要:test.sh 1 #! /bin/sh 2 A=0 3 if [ ! -e test.bin ] 4 then 5 make 6 A=1 7 fi 8 9 mipsel-linux-objdump -D -m mips -b binary -EL -M no-aliases -z test.bin >my.dump 10 11 if [ $A = 1 ] 12 then 13 rm sramboot.o *bin *exe 14 fish -e 如果一个命令失败就立即退出sh -n 读入命令但是不执行它们sh -u 置换时把未设置的变量看作出错sh -v 当读入shell输入行时把他们
阅读全文
摘要:摘自百度文库:linux源代码中汇编语言部分总是有.previous、.section、.long,这是一个ELF段堆栈操作命令。其他的段堆栈操作命令还有.section、.subsection、.pushsection、.popsection,本命令交换当前段(及其子段)和最近访问过的段(及其子段...
阅读全文
摘要:lwl,lwr,swl,swr中的指令后缀r(right),l(left)都是相对寄存器而言,load操作是把取到的部分数据,置入寄存器的left或者right,store操作时将寄存器中的数据的 left或者right部分写入目标地址。无论时大端和小端寄存器的格式都是固定的,即 寄存器中的有端时数据的低位,左端时数据的高位。非对齐访问的解决都是将原来的一条(对齐访问)完成的事分两步完成:首先取始地址addr到下一个对齐地址处的部分数据,按一定的顺序,置入寄存器的适当位置;然后取从该对齐地址到addr+len-1处的部分数据,按一定的顺序,置入寄存器的适当位置。lwr: 对于大端:从所指位置(
阅读全文
摘要:可以差下GUN GCC ATTRITUBE SYNTAX,阅读源码的时候方便查阅Attribute SyntaxThis section describes the syntax with which__attribute__may be used, and the constructs to which attribute specifiers bind, for the C language. Some details may vary for C++ and Objective-C. Because of infelicities in the grammar for attribute
阅读全文
摘要:出自0.12:main()也是一个函数。这是因为在编译连接时它将会作为crt0.s汇编程序的函数被调用。crt0.s是一个桩(stub)程序,名称中的“crt”是“C run-time”的缩写。该程序的目标文件将被链接在每个用户执行程序的开始部分,主要用于设置一些初始化全局变量。通常使用gcc编译链接生成文件时,gcc会自动把该文件的代码作为第一个模块链接在可执行程序中。在编译时使用显示详细信息选项“-v”就可以明显地看出这个链接操作过程。因此在通常的编译过程中,我们无需特别指定stub模块crt0.o。为了使用ELF格式的目标文件以及建立共享库模块文件,现在的编译器已经把crt0扩展成几个模
阅读全文
摘要:只谈一个问题:head_common.S中__switch_data:.long init_thread_union + THREAD_START_SPinit_thread_union 使用ctags无法跳转,且链接脚本中没有init_thread_union,使用grep搜索下发现这是在arch/unicore/kernel/init_task.c3 中的联合体变量名称(无法跳转,且不再链接脚本中,即该文件根本汇编文件并不像C文件那样,需要包含头文件,再加extern外部声明)。所以我们在head_common.S中用一个C中的联合体变量名加上了一个常数值。这是因为一个C中联合体变量名被当
阅读全文
摘要:mov pc, r4 @ call kernel 绝对跳转到r4:40008000处开始执行开始进入Image,Image由vmlinux生成,所以从vmlinux开始阅读理解。arch/unicore/kernel目录,据其链接脚本,从head.S开始:__lookup_processor_type:运用相对取址,取出proc_info_list,做出processor对比(因为一个镜像支持一种processor,该processor的信息从协处理器的c0:4d000863中取出)。这里首先要运用相对取值,因为我们编译的内核是按照虚拟地址进行编译链接的,其次是proc_info_list的存
阅读全文
摘要:misc.c中函数decompress_kernel的列表四个参数是:output_start:40008000,free_mem_ptr_p:sp, free_mem_ptr_end_p:sp+64K ,arch_id:9fc (arch_num个人感觉这个英文但其会引起歧义,arch_num的中文意思应该时架构号,改成mach_id可能更适合些,mach_id对应的中文时机器号)最终解压出的是Image放置在了40008000处unicore32-linux-objcopy -O binary -R .note -R .note.gnu.build-id -R .comment -S vm
阅读全文