对外贸营销型网站建设的几点建议,做淘宝主页网站,怎么修复网站死链,4徐汇区网站建设一.GNU命令 1、addr2line 把程序地址转换为文件名和行号 做调试
2、ar 建立#xff0c;修改#xff0c;提取归档文件
3、Id:GNU
arm-none-linux-gnueabi-ld start.o main.o -Tmap.lds -o uart.elf
链接器
4、as
主要用来编译GNU编译器gcc输出的汇编文件修改提取归档文件
3、Id:GNU
arm-none-linux-gnueabi-ld start.o main.o -Tmap.lds -o uart.elf
链接器
4、as
主要用来编译GNU编译器gcc输出的汇编文件产生的目标文件由链接器Id链接 类似于gcc -c
5、objcopy/arm-linux-objcopy(文件格式转换)
arm-linux-gnueabi-objcopy -o binary uart.elf uart.bin
6、objdump
显示一个或者更多目标文件的信息主要用于反编译
eg gcc -g test.c sudo dmesg -c //记录日志 ./a.out sudo dmesg // 查看日至信息如下 [5001.031629] a.out[32094]: segfault at 0 ip 000055f94062713d sp 00007ffcad1003d0 error 6 in a.out[55f9406270001000 ] 分析ip 000055f94062713d-55f9406270001000 0x113d地址处的指令出错1了 查找出错的指令 addr2line/objdump 方法一addr2line 0x113d 得到文件名和行号 方法二: objdump -SI a.out t_s //得到反编译文件 vi t_s //定位到113d可以找到出错指令了
7、strip:丢弃目标文件中的全部或者特定符号减小文件体积
eg:
strip a.out
二.bootloader移植
1.概念 是内核运行之前运行的一小段程序 主要是对硬件初始化为操作系统运行做准备 启动加载内核
2.特点 不属于操作系统 采用汇编和C编程 针对特定的cpu特定的板子定制的
3.操作模式 交互模式:适用bootloader移植人员 自启动模式适用与系统移植的人员
4.bootloader的两个阶段 1)汇编阶段 基本的硬件初始化例如:始时钟、内存。。。 自搬移 初始化堆栈及清空bss准备C环境 2)C阶段 初始化用到的所有的硬件例如flash、uart、网卡.... 等待输入命令pri/set/save.... 执行命令 三.uboot移植
1.特点 代码结构清晰、易于移植见目录结构 支持多种处理器体系结构见arch目录 支持众多开发板目前官方包中有200多种见board目录 命令丰富、有监控功能 支持网络协议、USB、SD等多种协议和设备 支持文件系统 更新较活跃使用者多有助于解决问题 2.命令 1)pri/printenv 显示所有环境变量 2)set/setenv 设置新的环境变量 set ipaddr 192.168.7.147 3)save/savenv 保存环境变量 save 4) tftp //网络下载文件 tftp 0x40008000 led.bin //下载led.bin到内存 5) loadb //通过串口kermit协议下载二进制数据 loadb 0x40008000 go 0x40008000 6)movi命令 tftp u-boot.bin 0x40008000 movi write uboot 0x40008000 //将内存0x40008000地址处的内容写到EMMC的uboot区 7)bootcmd 自启动命令 set bootcmd tftp 0x41000000 uImage\;tftp 0x42000000 exynos4412-fs4412.dtb save 8)go addr 执行内存中的二进制代码简单的跳转到指定地址 go 0x40008000 9)bootm kernel-addr ramdisk-addr dtb-addr
3.uboot的执行过程 1)第一阶段(汇编阶段) 设置CPU工作模式svc、关中断、关MMU、关catch 内存初始化、时钟初始化 自搬运(不需要) 设置堆栈、清空BSS段 2)第二阶段(C阶段) 各种硬件初始化GPIO、串口、网口…… 执行命令 加载内核
四.uboot源码分析
找入口(arch/arm/cpu/armv7/start.S) - 链接脚本 - arch/arm/cpu/u-boot.lds - Makefile
_start(arch/arm/cpu/armv7/start.S)://入口 reset: --|设置CPU的工作模式为SVC --|设置异常向量表 --|bl cpu_init_cp15 //关MMU和catch --|bl cpu_init_crit // --| b lowlevel_init (board/samsung/fs4412/lowlevel_init.S) --|if(uboot is not ram) --|时钟初始化 --|内存初始化 --|bl uart_asm_init 串口初始化 --|bl tzpc_init trust zone初始化 --|bl _main(arch/arm/lib/crt0.S) --|初始化堆栈清bss ,准备C环境 --|ldr pc, board_init_r(arch/arm/lib/board.c) --|初始化各种硬件(catch flash 网卡 串口 内存 电源 ....) --|for(;;) { main_loop();//等待命令 执行命令 } 五.uboot移植
1.明确需求 uboot能够启动加载内核即可
2.准备资料
3.确认是否支持当前CPU(arch/arm/cpu/armv7/exynos) 不支持换uboot版本 找芯片厂商要 支持: go 4
4.确认是否支持当前板子(board/samsung/fs4412) 不支持: 换uboot版本 找板子厂商 借鉴:和板子芯片同芯片的板子 支持:go 5
5.移植 1)借鉴origen板子 cp include/configs/origen.h include/configs/fs4412.h cp board/samsung/origen board/samsung/fs4412 -a 2)vi boards.cfg //添加fs4412,借鉴origen fs4412 arm armv7 fs4412 samsung exynos 3)修改Makefile #ifeq ($(HOSTARCH),$(ARCH)) CROSS_COMPILE ? arm-linux- #endif 4)make fs4412_config //让uboot识别fs4412并编译 5)make //编译 u-boot.bin
【验证】u-boot.bin是否能够启动加载内核 方法一:SD卡验证 使用SD烧写根据将 u-boot.bin 烧写到SD卡中然后拨码开关拨到1000,板子上电看效果 方法二:EMMC验证 SD卡启动(1000) - tftp 0x40008000 u-boot.bin - movi write uboot 0x40008000 - 切换拨码开关0111启动看效果