找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

电巢直播8月计划
查看: 173|回复: 7
打印 上一主题 下一主题

【转载】 JLINKv9在迅为iTOP-4412精英板上的应用

[复制链接]

11

主题

12

帖子

145

积分

二级会员(20)

Rank: 2Rank: 2

积分
145
跳转到指定楼层
1#
发表于 2017-9-12 10:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x

( U! x8 K0 X4 f# I; [
本文转自:https://www.amobbs.com/thread-5680586-1-1.html
很多人买迅为iTop4412精英板,在Android或Linux+Qt跑起来后学习开发调试应用程序或驱动,但在linux内核运行前发生了什么?能进行什么开发工作?并没有完整资料。其实,只要一根百元价位的JLINKv9,就可以搭建一个实用的boot阶段程序开发环境,使我们可以深入到貌似神秘的史前时代一探究竟。
我的精英板和JLINKv9刚到手一周左右,花了两三天功夫在环境搭建上,也遇到了一些坑,幸运的是都解决了。下面我就总结介绍一下这几天的工作,希望能对感兴趣的人有所帮助,能抛砖引玉就更好了。当然,在解决问题过程中,除了靠自己积累的知识外,也参考学习了网上的一些资料,在此向作者表示谢意,并尽量列出所参考的文章。
还要声明一点,就是boot阶段的开发当然需要一定的底层硬件知识。虽然本文所涉较少,但还是提醒初学者谨慎操作,以免损坏硬件。
正文:
系统环境:win8.1+VMWare+ubuntu14.04LTS
硬件:iTop4412精英板+JLINKv9调试电缆+SD卡及读卡器。JLINKv9电缆常用JTAG接头是2.54mm间距的大头,精英板上的JTAG接口是2mm间距的小头,所以还需要购买或自制转接板和小头电缆(淘宝售价10元以内)。硬件上一个小坑是我买的JLINKv9的JTAG接口的2脚有3.3V输出(SEGGER手册上写明NC,但有3.3V输出不知为什么),而精英板的JTAG口的1脚和2脚是短路的,这就使得如果不做改动直接连接,就使得JTAG1脚的检测电压是自身2脚输出的3.3V,而不是精英版输出的1.8V,使JLINK识别目标失败。改起来很简单,吧转接板大头和小头2脚间的连线划断就可以了。
关于JLINK软件的安装,只要去SEGGER官网下载最新版的Linux版的DEB安装包,用dpkg命令安装就可以了。还应该在Windows宿主机上安装win版的JLINK软件,这样宿主机也可以识别JLINK,出问题时也可和Linux虚拟机作对照。
首先确认JLINK可以识别4412。把JLINK电缆和串口电缆接好,开启Ubuntu虚拟机,在虚拟机Wokstation->虚拟机->可移动设备 菜单下把串口和SEGGER J-link与虚拟机连接好。开启虚拟机串口终端(我用的C-kermit),精英板上电进入u-boot状态。进入JLINK安装目录(缺省/opt/SEGGER/JLink/),运行 JLinkExe,如果没问题应该有VTref = 1.8xxV的目标检测电压输出(如果检测电压为3.3V,说明JTAG转接板未改,参考前面)。由于JLINKv9不直接支持4412,所以不能自动识别目标,需手动连接。按提示输入connect命令,依次输入“CORTEX-A9”,回车,“J”,回车,“-1,-1”,回车,4000,回车。界面如下图。
此时若JLINK和目标板软硬件没问题,则4412的cortex-a9 CPU#0能被识别,这正是我们期待的。截图如下。
在此基础上可以做些实验,发现如下问题:cp15协处理器读写命令无效;只能调试单核;0x02000000物理地址开始的内存无法读取,而这是关键的iROM和iRAM映射区域,史前文明的秘密宝藏就在这里。第一个问题可以在编程时用汇编指令读cp15到通用寄存器然后设置相应断点来一定程度规避。第二个问题对于调试boot阶段程序来说不是问题,因为这时本来只有CPU#0运行。第三个问题就得认真对待了。从上图可以看到此时MMU使能,物理地址已不能直接应用。我还没有深究此版本u-boot源码,不知道该段物理地址是否映射到某个虚拟地址。换个思路,可以重写一个BL2阶段的程序,该程序为目的只是一个无限循环,用JLinkExe的halt命令终止其运行,就可保留BL1刚结束而BL2刚开始时的现场。让我们实现这个思路看看会得到什么。
我利用较新版(建议2017以后)的u-boot源码改造生成SPL的方式产生所需要的BL2程序。ARM交叉工具链用Linaro的arm-eabi-系列。按照上述思路,只要在u-boot源码的arch/arm/cpu/armv7/start.S的第一条指令改为跳转自身地址的指令即可。但经过实验,以此生成的BL2程序在精英板运行后,JLinkExe检测到的VTref为0V,JLINK无法连接目标。由此猜想是BL2程序缺少必要的电源管理设置。参考网上文章http://blog.csdn.net/techping/article/details/69911634,找到该文中arch/arm/mach-exynos/board.c的电源管理部分代码,根据相关4412的寄存器地址,查4412手册知道要设置PSHOLD引脚输出,又对照精英板的原理图,发现PSHOLD信号确实是控制电源管理芯片的,就用汇编实现此功能。修改后的start.S入口处代码如下:
reset:
/ u8 a  a1 A4 x# p, s8 @/* Allow the board to save important registers */
* w) F5 q# U6 w0 R% B* W$ ]" F/*b save_boot_params*// Y2 R8 o# P; P- [9 e1 E3 E
ldr r1, =0x1002330c6 S, D% A( ?5 w$ M
ldr r0, [r1]
8 H7 g3 @. x8 }2 Y1 hdmb
! f8 H/ Y5 T+ C' vldr r2, =0x300
) R5 o1 a9 {; horr r0, r0, r2
, o( b5 A8 G0 F% d$ f  w/ ^dmb
# |7 D+ j% g( o3 I. P& @3 }str r0, [r1]
7 W. T/ S9 Z5 ~4 e# x( J5 y4 x8 r( `$ f2 I
ldr r1, =0x11000c084 |4 h' ?% I; Q4 L+ j$ |
mov r0, #0- Y% Z3 \" j* O+ ]0 W7 L
dmb4 P4 `, q) ?+ |& q1 ^0 ~4 B
str r0, [r1]: e! I  Y4 \9 z! V4 m7 H
reset11:
9 y0 A; z( O; G# o% zbreset11
u-boot的配置用什么?也是这篇网文建议用三星origen板子的配置改。只要把include/configs/origen.h中#define CONFIG_SPL_TEXT_BASE 的值改为0x02023400即可。这个地址是三星提供的BL1程序对它引导的BL2程序的要求。此配置项的作用就是生成SPL程序的lds链接文件的.ram区域的起始地址和设置.TEXT段的起始地址(二者相同),这可在SPL的Makefile文件中看到。然后在新版u-boot目录下运行make origen_defconfig,配置完后交叉编译新版u-boot即可。此时在新版u-boot源码目录下生成spl目录,其中的u-boot-spl.bin就是我们要得到的BL2程序镜像。
下面的工作需要借用精英板光盘提供的CodeSign4SecureBoot_SCP目录文件和旧版u-boot源码。在旧版u-boot源码下有个mkbl2程序是用来生成最终14K大小的bl2.bin文件的,但此程序有问题,用它生成会产生Unsupported szie错误。网上有改过的该程序源码,为方便我直接粘贴如下
/* 6 N4 z5 R! }. ?
* Copyright (c) 2010 Samsung Electronics Co., Ltd.
9 r2 M& Z0 f4 ^, o3 {) p *              http://www.samsung.com/ ! _8 ^- |9 [6 A
*
- d* X. [9 A- u8 o * This program is free software; you can redistribute it and/or modify 9 O- y" t4 E* y$ \. l4 {# S
* it under the terms of the GNU General Public License version 2 as 3 \; I* s* n  \7 T
* published by the Free Software Foundation. ) f; S8 R5 C; O/ y3 [/ F
*/  
; M$ f4 [6 ]/ i3 D  % k  W& y: L8 o! ^9 S9 y0 Y
#include <stdio.h>  
( @( |9 ]8 N% j, W+ }- g7 F#include <string.h>  
+ E2 x, p+ c, X! v* _#include <stdlib.h>  
9 r- \7 h6 b3 a8 {/ L7 e7 R  4 J  h- N; b2 F' v& G
int main (int argc, char *argv[])  4 |4 {! i2 f& ?: E7 W5 {5 I
{  
/ c& ~4 r; M6 x' ]9 G    FILE        *fp;  
; _& _0 R& C  _0 v0 u. Z# B* G    unsigned char   src;  % n* Z6 x) ?2 g/ l
    char        *Buf, *a;  
( B9 _, E/ m+ A+ S    int     BufLen;  5 M/ T$ B+ m8 }) z, m
    int     nbytes, fileLen;  
1 J5 G% ?* k+ \. J6 b: y: `    unsigned int    checksum = 0;  ( M( p  C0 ^" [8 `" Q1 s9 W' ]
    int     i;  
- h: }- s  i7 n+ I' D% f$ R& D1 p  : t+ z* i8 y$ H+ h) e: V3 I1 |* j- W+ t7 M
    if (argc != 4)  + }0 e. h  W+ P- a' f+ c+ X
    {  
: X) N  K6 N) N2 H& q        printf("Usage: mkbl1 <source file> <destination file> <size> \n");  
/ b! x( f3 |3 p$ e        return -1;  % p. \& m% \, Y4 h5 c6 ?
    }  0 D4 Y9 b0 S: k% H( v! o
  
- X5 r% C0 l: j+ j* F    BufLen = atoi(argv[3]);  
9 l# Y" ?. Z( E: M    Buf = (char *)malloc(BufLen);  1 ~( ^  U' ^$ b4 h" v: X# p
    memset(Buf, 0x00, BufLen);  
- y% G. ]. K8 l0 R1 X  5 c9 Q) d# d9 d7 A" i; f
    fp = fopen(argv[1], "rb");  - y" l/ |' r7 ?' D7 `+ @; [
    if( fp == NULL)  % V6 W1 R6 w+ N7 s- J
    {  7 p% l/ S7 d, w  g& V1 B+ i
        printf("source file open error\n");  
; k1 Y, o/ l# G, P: i: B        free(Buf);  " I7 _! p( w! Z0 {" C. G
        return -1;  
% A& M. b. B7 ?- c: A    }  ! M. h5 s1 N: B( T/ J% n( q
  
" }& M1 U# ]1 H8 w& b    fseek(fp, 0L, SEEK_END);  : ~! ~1 J( B# A2 y7 M2 M
    fileLen = ftell(fp);  ) a" {0 C* k, Q2 p1 s( e. p% i
    fseek(fp, 0L, SEEK_SET);  
! Z) X! ^1 P7 L' c2 r2 B* W/*
' J' `9 c; _' U, [# O& h$ c& f0 }    if ( BufLen > fileLen ) $ Y7 |0 f. c- Y& D( g, }
    { ) |) a- d% z5 J6 Z
        printf("Usage: unsupported size\n");
3 @1 }9 o4 D1 c; `        free(Buf); 6 R  R7 }7 I9 s. K, |% i  ]7 S$ W" e
        fclose(fp); & ^  P9 _1 E; q+ N3 N
        return -1;
% O+ j8 Q2 e3 o; f    } 8 w7 i+ t  P/ W
*/  * j/ A3 M- s) n- V, i  d& [
    //nbytes = fread(Buf, 1, BufLen, fp);  
- _) m* }! q  {* p9 v    if(BufLen > fileLen)  
# b* s" Y7 O2 l- @8 V$ ^/ v        nbytes = fread(Buf, 1, fileLen, fp);  
' r* g$ h6 A; q" _/ a    else  
/ Q5 \9 p! ?  d3 U* h4 \) t$ f        nbytes = fread(Buf, 1, BufLen, fp);  
3 C% s# c3 A; ^. A5 @/*
: D8 b/ c: y- D# h& D) z    if ( nbytes != BufLen )
# M5 w/ J) [7 a9 O% J8 l    { , A+ M2 k% q& a: |4 Z, e
        printf("source file read error\n");
  k0 z- J4 L2 z; u% D9 y# J) G        free(Buf);
! B& v$ f  A3 h; T* u9 j        fclose(fp);
4 U; q( A) N4 ^        return -1;
! z+ Q) Y  o+ ^6 ]3 h1 ~    }
* T$ ~2 L) g+ Z( @  v6 [9 G0 R: M*/  9 \, a! w, g9 Y4 w# Y$ O
    fclose(fp);  ; j! _% Z' K  _
  
# a5 a: ?& a! {, C    for(i = 0;i < (14 * 1024) - 4;i++)  9 a' X, a) a1 ]0 X" ^# ^) e
    {  
1 x) W" w: r$ H9 A        checksum += (unsigned char)(Buf);  : W9 N& E, U" w
    }  
3 o/ D0 n( |' Q( S  F4 Y    *(unsigned int*)(Buf+i) = checksum;  
% c' i" n: p$ [$ u8 k, @  
8 ~7 H$ C! }6 F8 N    fp = fopen(argv[2], "wb");  6 r# ^4 h2 G. t5 ~+ o4 a
    if (fp == NULL)  
# t9 B- z. t6 o+ r" H' ~    {  2 F2 c! b0 I6 E5 A
        printf("destination file open error\n");  ! ?' E' E4 Z6 _8 L* ?2 ~
        free(Buf);  
) K% r' y, I0 U- P        return -1;  ' a: Y$ h& ~3 L, e
    }  0 H5 E: `. u5 A# m, k  U" N
  ( d7 ^7 K7 f6 b
    a   = Buf;  % t/ {8 O- J- y/ X
    nbytes  = fwrite( a, 1, BufLen, fp);  8 j0 q! s5 v& Y5 C) ]: Y
  
% y& h3 \. N" z, U    if ( nbytes != BufLen )  , g) X% p/ ?' c& r( P0 l5 y  D
    {  
+ S4 B* R3 X$ u; ~( \9 ?        printf("destination file write error\n");  
! ^! S( L: R  @1 H& ?        free(Buf);  # D3 I# l' h; Q" P0 u3 A1 A
        fclose(fp);  
4 Z" q2 e1 b% Y$ x% O0 h9 N6 I        return -1;  
1 _3 z; Y0 c* v5 P1 P1 ]    }  0 b4 ^: i, ?; b9 Q6 z
  6 r4 a- R% `4 l- _' \
    free(Buf);  3 n1 D3 R6 a$ o" B$ z" ^
    fclose(fp);  ' r2 \2 Y! p# n" d( n  G! E1 H
  # j* }/ N/ M- z% \
    return 0;  , U9 O2 J, o, o
}  
读者可用此源码本地编译生成可用的mkbl2程序来代替旧版的。然后把编译新版u-boot生成的u-boot-spl.bin拷贝在旧版u-boot源码下。在旧版u-boot源码目录下运行如下命令
./mkbl2 u-boot-spl.bin bl2.bin 14336 生成可用的bl2.bin镜像。把bl2.bin拷贝到CodeSign4SecureBoot_SCP目录下,并把旧版u-boot目录下的E4412_N.bl1.bin拷贝到CodeSign4SecureBoot_SCP目录下。在CodeSign4SecureBoot_SCP目录下新建一shell脚本文件my_build_bin.sh,内容如下
#!/bin/sh
. S) C/ e, q6 E$ o$ _7 f# Pcat E4412_N.bl1.bin bl2.bin all00_padding.bin > u-boot-iTOP-4412.bin
/ ~: s8 `9 }9 C: }! Wmv u-boot-iTOP-4412.bin ~/iTop/iTop4412_uboot/
其中mv命令的目标目录是我的旧版u-boot源码目录,读者应改为自己的相应路径。
CodeSign4SecureBoot_SCP目录下运行./my_build_bin命令,在旧版u-boot目录下就有u-boot-iTop-4412.bin文件生成,该文件大小正好为24k,就是我们要烧到SD卡的启动镜像,包括BL1和BL2阶段的程序。然后参考ITop4412 精英板手册出厂前首次烧录TF卡方法用旧版u-boot目录下的mkuboot命令制作SD卡。把SD卡插入精英板,拨码开关设置为TF卡启动模式,启动精英板,用JLinkExe连接目标板,此时输出部分截图如下
可以看到此时MMU是关闭的。现在用mem再查看0x02000000物理地址区域,可以访问了!貌似JLINK不支持一次读取大量内存内容,我用savebin命令分次读取了iROM在0x02000000的64k映像,合并成一个文件,并用arm-eabi-objdump反汇编之,就可以弄清完整史前时代的来龙去脉了。下面是iROM程序的反汇编成果的开始部分,有兴趣的读者可以留邮箱,我会把完整的64k iROM程序镜像发给你。
irom:     fileformat binary
' J, G/ e+ Q7 _5 ^% I
9 d4 _5 A0 C. W+ G4 y0 N' Z; [/ y, n; T) g' {( ]( p& l
Disassembly of section .data:. x; S1 I% p' h. g" _' q) L8 z

' }7 |+ C) n) N: {00000000 <.data>:1 ^1 x: q7 g; Z" K+ r" b5 m$ N
       0:   ea000006   b   0x202 U8 C  p) B: u& V
       4:   eafffffe   b   0x44 h: w" j0 p. W0 s" C6 Z
       8:   eafffffe   b   0x8% L. i6 b- `6 e
       c:   eafffffe   b   0xc
, v. K. L6 j5 B. N7 |      10:   eafffffe   b   0x10( Z+ U- ]$ V$ Z' t/ O3 W- U
      14:   eafffffe   b   0x142 A; S6 U9 S4 I% [% e3 e' t/ C
      18:   ea00301a   b   0xc0884 L3 }, e! a0 `0 W7 a2 ~* |
      1c:   ea00301b   b   0xc090
* Z; O. n, n, K' _+ C) p9 C      20:   e59f01a4   ldr r0,[pc, #420]  ; 0x1cc+ ~9 Q2 T' y* d2 D
      24:   e3a01000   mov r1,#0
7 s: b. f' a2 B4 g7 {      28:   e5801000   str r1,[r0]! ?) k6 _7 m" u  D% Z4 E( U5 Q
      2c:   e59f019c   ldr r0,[pc, #412]  ; 0x1d0
, `" T! G, R& h3 h* Y4 E      30:   e5900000   ldr r0,[r0]* }2 c  ?: K8 \0 ?1 {% ?. [! w
      34:   e200003e   and r0,r0, #62 ; 0x3e& |" f) h1 Y1 O
      38:   e330003e   teq r0,#62 ; 0x3e
  c9 i( T6 ]8 p* e: Q4 F      3c:   1a00000d   bne 0x78
& H3 [+ Z/ C7 ^0 V1 G* E; U5 T      40:   e59f018c   ldr r0,[pc, #396]  ; 0x1d4! T: Z- [4 H, I  A! j* N
      44:   e5900000   ldr r0,[r0]
% G1 z4 x! U+ @7 L# ?4 Z      48:   e3100001   tst r0,#1
: h) D( T- }5 ?+ w      4c:   1a000009   bne 0x78
* Z2 ?8 j+ i+ p, U, |7 @      50:   e59f2180   ldr r2,[pc, #384]  ; 0x1d89 I# l8 _/ [" ]' P: K7 d
      54:   e5922000   ldr r2,[r2]
& n9 N8 d) F1 e$ s4 w* {      58:   e3e03000   mvn r3,#0
" Q" [% n# v% {) B% O      5c:   e1120003   tst r2,r3
% H3 _2 k& Q# @      60:   1a000003   bne 0x74+ O) A- d9 i9 L' J% d6 T2 a
      64:   e59f0170   ldr r0,[pc, #368]  ; 0x1dc
5 I6 R, H/ u$ Q) p5 ?' ~      68:   e59f1170   ldr r1,[pc, #368]  ; 0x1e0
9 v+ `  i! b! I: Z3 C9 r0 }2 m      6c:   e5801000   str r1,[r0]7 R! @+ T2 d3 F
      70:   e59f2164   ldr r2,[pc, #356]  ; 0x1dc) ~0 P, W0 L1 W' Y
      74:   e1a0f002   mov pc,r2* T$ H7 B+ S0 o8 G
      78:   e321f0d3   msr CPSR_c,#211    ; 0xd3
+ t5 K4 G- I' e3 B% @) y$ n6 j* m      7c:   ee110f10   mrc 15,0, r0, cr1, cr0, {0}& J- G1 D. X" a8 ]# j! N
      80:   e3c00001   bic r0,r0, #1. K: A# w9 I# v7 O. Z
      84:   e3c00004   bic r0,r0, #4
$ o8 d: E, _7 g, [! t& d$ n# h     88:   e3a02281    mov r2,#268435464  ; 0x10000008% B  ~1 J. J1 P: v
      8c:   e5923000   ldr r3,[r2]
& p% Y9 }' ]) S      90:   e3130501   tst r3,#4194304    ; 0x400000
! Q, _6 ?0 v! D; i      94:   0a000002   beq 0xa4
. s. p9 d: |; k6 B+ P1 M" ]: ?, v) Y1 |7 \      98:   e3c00a01   bic r0,r0, #4096   ; 0x1000
" ^3 e' L0 v$ z3 X      9c:   ee010f10   mcr 15,0, r0, cr1, cr0, {0}1 _9 M; Q' V) V( I5 S  b& z
      a0:   ea000006   b   0xc0
5 T  ~8 Q) z( p1 s/ N      a4:   e3a00000   mov r0,#0
& I/ r, H; t4 x6 U$ j      a8:   ee080f17   mcr 15,0, r0, cr8, cr7, {0}$ P8 x; ^* q  n8 K) J+ p
      ac:   ee070f15   mcr 15,0, r0, cr7, cr5, {0}
9 ]( c0 v; j- J7 w. a5 v1 e      b0:   eb0022ea   bl  0x8c60
+ }" n- B  p4 }0 ^5 z4 F      b4:   ee110f10   mrc 15,0, r0, cr1, cr0, {0}
% i, r6 a: M  G0 h# e      b8:   e3800a01   orr r0,r0, #4096   ; 0x1000$ y8 K- b. n+ x( P. X7 K) r
      bc:   ee010f10   mcr 15,0, r0, cr1, cr0, {0}
# G2 H  d3 O% F5 Q      c0:   ee10cfb0   mrc 15,0, ip, cr0, cr0, {5}
6 z- U8 j) U( O0 |; q  c: _: g      c4:   e20cc003   and ip,ip, #3- k% S# C2 f3 k" O* d# B6 I
      c8:   e59f2114   ldr r2,[pc, #276]  ; 0x1e4: W- J. w0 ?- u2 t$ t
      cc:   e082010c   add r0,r2, ip, lsl #2
. c) Y) v+ k0 J4 B- [      d0:   e35c0000   cmp ip,#0
+ ]" ]. l' z' h1 F. @& h      d4:   1a0022da   bne 0x8c44. Q* ]: }3 T3 ~$ {4 r
      d8:   e59f0108   ldr r0,[pc, #264]  ; 0x1e8
5 f6 L5 d' f, M8 j! x$ m2 R* o      dc:   e5900000   ldr r0,[r0]
; K- }% P0 |2 M# f0 f- Z6 I      e0:   e3a01102   mov r1,#-2147483648    ; 0x80000000
! P, ^2 `8 k) P0 S8 L+ ]; n. ?      e4:   e1100001   tst r0,r1
2 R1 B8 ?* Y' t' p) J      e8:   0a000024   beq 0x180) e4 z0 R! V, m9 E" F' Y( V7 W  O+ t. |
      ec:   e59f00f8   ldr r0,[pc, #248]  ; 0x1ec
' R2 {9 p6 R& X% V: z2 j: D      f0:   e5900000   ldr r0,[r0]
: ]+ S7 k8 i6 ?7 ]6 y: _2 Y      f4:   e3100001   tst r0,#1
. R- P& N! _. @1 n  ?8 ?7 r3 [      f8:   0a000020   beq 0x1805 o5 l0 o5 d, l, G5 O
      fc:   e59f00ec   ldr r0,[pc, #236]  ; 0x1f0* N$ Z% ?- a+ Y, |5 I
     100:   e5900000   ldr r0,[r0]
至此,我们的史前时代探险完成了。作为一个有价值的副产品,我们也建立了用JLINK搭建的boot阶段程序调试环境。下面我简要介绍下gdb调试环境的搭建。
退出JLinkExe,运行JLinkGDBServer -device CORTEX-A9 -speed 4000命令,则JLinkGDBServer就与目标建立了连接,并等待gdb连入。在另一个虚拟终端下运行arm-eabi-gdb命令,在(gdb)提示符下输入target remote localhost:2331命令与JLinkGDBServer建立连接,用file命令关联新版u-boot源码spl目录下的u-boot-spl文件,就可以进行源码级调试了。这样,我们就搭建了一个实用的boot阶段程序调试环境,并可以借用新版u-boot源码平台开发属于自己的boot程序了。
附主要参考的文章链接:
http://blog.csdn.net/techping/article/details/69911634
http://www.cnblogs.com/humaoxiao/p/4166230.html
http://blog.csdn.net/lizuobin2/article/details/52832857

! T1 h, {, ?" t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

33

主题

1228

帖子

3259

积分

版务助理

Rank: 6Rank: 6

积分
3259
2#
发表于 2017-9-12 13:41 | 只看该作者

0

主题

4

帖子

56

积分

二级会员(20)

Rank: 2Rank: 2

积分
56
3#
发表于 2017-9-22 10:30 | 只看该作者
多谢分享教程,学习了,好贴

6

主题

8

帖子

87

积分

二级会员(20)

Rank: 2Rank: 2

积分
87
4#
发表于 2017-10-9 15:03 | 只看该作者
1111111111111111,好贴

0

主题

7

帖子

36

积分

二级会员(20)

Rank: 2Rank: 2

积分
36
5#
发表于 2017-10-27 11:17 | 只看该作者
好贴,受益了

25

主题

168

帖子

473

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
473
6#
发表于 2017-10-28 19:16 | 只看该作者
好贴,受益了

13

主题

175

帖子

152

积分

二级会员(20)

Rank: 2Rank: 2

积分
152
7#
发表于 2017-11-25 20:25 | 只看该作者
晕 在我帖里面找偶像啊??

0

主题

2

帖子

14

积分

二级会员(20)

Rank: 2Rank: 2

积分
14
8#
发表于 2018-2-9 10:32 | 只看该作者
赞,,好文章
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-7-2 08:16 , Processed in 0.066464 second(s), 32 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表