移植uboot到tiny4412SDK全过程

拿到tiny4412目标板后,直接烧写友善之臂提供的superboot即可使用,但是它们的代码不开源,一旦以后换了板子就没辙了。还得认真了解一些uboot的移植操作,于是亲身体验了一把将uboot源码,移植到tiny4412上面。

准备工作

uboot源码(最好官网上下载源码,友善之臂提供的uboot被裁剪过了)
烧写工具(源码是samsung提供的,直接从友善之臂光盘拷出来就行)
以上2个内容的代码我已经上传:uboot+工具
SD卡,目标板,串口线,交叉编译工具链

操作过程

一、安装交叉编译工具

jw@pc:~$ tar xvzf arm-linux-gcc-4.5.1-v6-vfp-YYYYMMDD.tgz –C /

注意:C 后面有个空格,并且 C 是大写的,它是英文单词“Change”的第一个字母,在此是改变目录的意思。
执行该命令,将把 arm-linux-gcc 安装到/opt/FriendlyARM/toolschain/4.5.1 目录。

jw@pc:~$ sudo gedit ~/.bashrc

编 辑 ~/.bashrc 文 件 , 注 意 “ bashrc ” 前 面 有 一 个 “ . ”, 修 改 最 后 一 行 为 export PATH=$PATH:/opt/FriendlyARM/toolschain/4.5.1/bin,注意路径一定要写对,否则将不会有效。

更新一下.bashrc,查看安装是否成功

jw@pc:~$ source ~/.bashrc
jw@pc:~$ arm-linux-gcc –v

结果是没找到文件…opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc无法找到

再补安装2个库一个32位库,一个64位库。问题解决。

sudo apt-get install lib32z1
sudo apt-get install lsb-core

二、查看uboot源码

Ctrl+Alt+t打开终端,输入命令,带//的是我后来加的注释
//进入uboot目录

jw@PC:~$ cd ~/test/u-boot-2013.01/

//ls列出目录下的文件,可以看到我把sd_fuse也放在这里(烧写SD卡的工具)

jw@PC:u-boot-2013.01$ ls
api         config.mk  drivers    include      mkconfig  rules.mk         tools
arch        COPYING    dts        lib          nand_spl  sd_fuse
board       CREDITS    examples   MAINTAINERS  net       snapshot.commit
boards.cfg  disk       fs         MAKEALL      post      spl
common      doc        helper.mk  Makefile     README    test

//做一次彻底清楚,清除上次遗留的其他板级配置文件
//制作板级配置文件,专用于我的开发板tiny4412

jw@PC:u-boot-2013.01$ make distclean
jw@PC:u-boot-2013.01$ make tiny4412_config
make: *** No rule to make target `tiny4412_config'.  Stop.
Makefile:776: recipe for target 'tiny4412_config' failed
make: *** [tiny4412_config] Error 1

//报错,没有对应“tiny4412_config”的规则,用grep查找错误,同级目录的mkconfig文件的25行发生了这个错误

扫描二维码关注公众号,回复: 9834268 查看本文章
jw@PC:u-boot-2013.01$ grep '*** No rule to make target' -nR
mkconfig:25:		echo "make: *** No rule to make target \`$2_config'.  Stop." >&2

//使用vim查看mkconfig,大意为在boards.cfg文件中找不到tiny4412_config,那就看看borads.cfg

jw@PC:u-boot-2013.01$ vim mkconfig
............
 24         line=`egrep -i "^[[:space:]]*${2}[[:space:]]" boards.cfg` || {
 25                 echo "make: *** No rule to make target \`$2_config'.  Stop." >&2
 26                 exit 1  
 27         }
...........
jw@PC:u-boot-2013.01$ vim boards.cfg 

//在列表中插入一行:

tiny4412    arm    armv7    tiny4412      samsung     exynos

//保存退出,然后继续执行刚刚的指令

jw@PC:u-boot-2013.01$ make tiny4412_config
Configuring for tiny4412 board...

//这次没有报错,接下来需要配置一些板级文件了,以ORIGEN作为参考板,可以拷贝参考板的文件给tiny4412所用
//uboot里的同名文件很多,所以注意文件目录不要写错

jw@PC:u-boot-2013.01$ cp -arf ./board/samsung/origen ./board/samsung/tiny4412
jw@PC:u-boot-2013.01$ mv ./board/samsung/tiny4412/origen.c ./board/samsung/tiny4412/tiny4412.c
jw@PC:u-boot-2013.01$ cp include/configs/origen.h  include/configs/tiny4412.h

//拷贝,改名,改内容,先修改子目录下的Makefile的内容

jw@PC:u-boot-2013.01$ vim ./board/samsung/tiny4412/Makefile

.............
 30 ifndef CONFIG_SPL_BUILD
 31 COBJS   += origen.o
 32 endif
.............

//把origen.o替换成tiny4412.o,如下,然后保存退出

.............
 30 ifndef CONFIG_SPL_BUILD
 31 COBJS   += tiny4412.o
 32 endif
.............

//接着修改tiny4412.h的内容,一共2个地方,把ORIGEN替换成tiny4412

.....................
101 /* Miscellaneous configurable options */
102 #define CONFIG_SYS_LONGHELP             /* undef to save memory */
103 #define CONFIG_SYS_HUSH_PARSER          /* use "hush" command parser    */
104 #define CONFIG_SYS_PROMPT               "ORIGEN # "//(ORIGEN替换成tiny4412)
105 #define CONFIG_SYS_CBSIZE               256     /* Console I/O Buffer Size*/
106 #define CONFIG_SYS_PBSIZE               384     /* Print Buffer Size */
107 #define CONFIG_SYS_MAXARGS              16      /* max number of command args */
108 #define CONFIG_DEFAULT_CONSOLE          "console=ttySAC2,115200n8\0"
......................
130 /* FLASH and environment organization */
131 #define CONFIG_SYS_NO_FLASH             1
132 #undef CONFIG_CMD_IMLS
133 #define CONFIG_IDENT_STRING             " for ORIGEN"//(ORIGEN替换成tiny4412)
134 
135 #define CONFIG_CLK_1000_400_200
........................

//修改完成,接下来开始正式编译uboot了,先深度清除一下

jw@PC:u-boot-2013.01$ make distclean

//制作tiny4412的板级配置文件

jw@PC:u-boot-2013.01$ make tiny4412_config

//制作uboot

jw@PC:u-boot-2013.01$ make
........

//如果一切顺利,使用ls打印文件列表

jw@PC:u-boot-2013.01$ ls
api    boards.cfg  COPYING  doc      examples   include      MAKEALL   nand_spl  README    snapshot.commit  test    u-boot.bin  u-boot.srec
arch   common      CREDITS  drivers  fs         lib          Makefile  net       rules.mk  spl              tools   u-boot.lds
board  config.mk   disk     dts      helper.mk  MAINTAINERS  mkconfig  post      sd_fuse   System.map       u-boot  u-boot.map

//可以看到,出现了u-boot.bin文件了,该文件还得借助sd_fuse中的工具才能烧写进SD卡
//插入一张SD卡,我的是8G的SD卡,之前被格式化成FAT32的格式了,df命令查看分区情况

jw@PC:u-boot-2013.01$ df -h
文件系统        容量  已用  可用 已用% 挂载点
udev            3.9G     0  3.9G    0% /dev
tmpfs           789M  2.0M  788M    1% /run
/dev/sdb9        61G   11G   48G   18% /
tmpfs           3.9G     0  3.9G    0% /dev/shm
tmpfs           5.0M  4.0K  5.0M    1% /run/lock
tmpfs           3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/loop5       43M   43M     0  100% /snap/gtk-common-themes/1313
/dev/loop1       55M   55M     0  100% /snap/core18/1066
/dev/loop14      15M   15M     0  100% /snap/gnome-characters/399
/dev/loop12     150M  150M     0  100% /snap/gnome-3-28-1804/67
/dev/loop11     4.3M  4.3M     0  100% /snap/gnome-calculator/544
/dev/loop7      4.2M  4.2M     0  100% /snap/gnome-calculator/406
/dev/loop0       45M   45M     0  100% /snap/gtk-common-themes/1440
/dev/loop10     3.8M  3.8M     0  100% /snap/gnome-system-monitor/127
/dev/loop6       90M   90M     0  100% /snap/core/8268
/dev/loop13      55M   55M     0  100% /snap/core18/1668
/dev/loop15     1.0M  1.0M     0  100% /snap/gnome-logs/81
/dev/loop4      3.8M  3.8M     0  100% /snap/gnome-system-monitor/100
/dev/loop3      1.0M  1.0M     0  100% /snap/gnome-logs/61
/dev/loop2       15M   15M     0  100% /snap/gnome-characters/296
/dev/loop8      161M  161M     0  100% /snap/gnome-3-28-1804/116
/dev/loop9       92M   92M     0  100% /snap/core/8592
/dev/sdb2       180M  112M   59M   66% /boot
tmpfs           789M   16K  789M    1% /run/user/121
tmpfs           789M   24K  789M    1% /run/user/1000
/dev/mmcblk0p1  7.3G  4.0K  7.3G    1% /media/jw/FRIENDLYARM

//最后这个就是我的SD卡了,自动挂载的
//如果没有挂载点,是不能读写的,可以用mount挂载

jw@PC:u-boot-2013.01$ cd sd_fuse/
jw@PC:sd_fuse$ ls
Makefile  sd_fdisk.c  tiny4412  V310-EVT1-mkbl2.c

//先清除一次,防止历史遗留文件使编译出错

jw@PC:sd_fuse$ make clean
rm		-rf sd_fdisk
rm		-rf mkbl2

//make一下制作mkbl2,该源码是samsung提供的

jw@PC:sd_fuse$ make
gcc -o	mkbl2 V310-EVT1-mkbl2.c 
gcc -o	sd_fdisk sd_fdisk.c

//进入tiny4412文件夹执行烧写脚本./sd_fusing.sh 后面跟着的是内存卡

jw@PC:sd_fuse$ cd tiny4412/
jw@PC:tiny4412$ sudo ./sd_fusing.sh /dev/mmcblk0p1
/dev/mmcblk0p1 reader is identified.
cat: /sys/block/mmcblk0p1/size: 没有那个文件或目录
./sd_fusing.sh: 31: [: -le: unexpected operator
./sd_fusing.sh: 36: [: -gt: unexpected operator
---------------------------------------
BL1 fusing
记录了16+0 的读入
记录了16+0 的写出
8192 bytes (8.2 kB, 8.0 KiB) copied, 0.0383794 s, 213 kB/s
---------------------------------------
BL2 fusing
记录了28+0 的读入
记录了28+0 的写出
14336 bytes (14 kB, 14 KiB) copied, 0.0430236 s, 333 kB/s
---------------------------------------
u-boot fusing
记录了349+1 的读入
记录了349+1 的写出
178752 bytes (179 kB, 175 KiB) copied, 0.573167 s, 312 kB/s
---------------------------------------
TrustZone S/W fusing
记录了184+0 的读入
记录了184+0 的写出
94208 bytes (94 kB, 92 KiB) copied, 0.304818 s, 309 kB/s
---------------------------------------
U-boot image is fused successfully.
Eject SD card and insert it again

//烧写完成,电脑插上串口线,我用的USB转232串口线

jw@PC:tiny4412$ lsmod | grep usb
usbserial              49152  1 pl2303
btusb                  57344  0
btrtl                  20480  1 btusb
btbcm                  16384  1 btusb
btintel                24576  1 btusb
bluetooth             573440  33 btrtl,btintel,btbcm,bnep,btusb,rfcomm
usbhid                 53248  0
hid                   131072  2 usbhid,hid_generic

//USB转232用的驱动就是pl2303

jw@PC:tiny4412$ dmesg | grep ttyUSB
[   13.187648] usb 2-3: pl2303 converter now attached to ttyUSB0

//这时ARM开发板并没有上电,只是PC机一端插着USB端,记住这里连接着的是ttyUSB0
//打开minicom,配置端口Serial port setup,然后再Save setup as dfl保存为默认配置

jw@PC:tiny4412$ sudo minicom -s

            +-----[configuration]------+
            | Filenames and paths      |
            | File transfer protocols  |
            | Serial port setup        |
            | Modem and dialing        |
            | Screen and keyboard      |
            | Save setup as dfl        |
            | Save setup as..          |
            | Exit                     |
            | Exit from Minicom        |
            +--------------------------+
    +-----------------------------------------------------------------------+
    | A -    Serial Device      : /dev/ttyUSB0                              |
    | B - Lockfile Location     : /var/lock                                 |
    | C -   Callin Program      :                                           |
    | D -  Callout Program      :                                           |
    | E -    Bps/Par/Bits       : 115200 8N1                                |
    | F - Hardware Flow Control : No                                        |
    | G - Software Flow Control : No                                        |
    |                                                                       |
    |    Change which setting?                                              |
    +-----------------------------------------------------------------------+

//保存,以后每次启动直接输入minicom

jw@PC:tiny4412$ minicom
Welcome to minicom 2.7.1

OPTIONS: I18n 
Compiled on Aug 13 2017, 15:25:34.
Port /dev/ttyUSB0, 22:14:04

Press CTRL-A Z for help on special keys

//接着开发板插入SD卡,开关拨到SDBOOT,开机
OK

U-Boot 2010.12 (Jan 27 2020 - 16:41:45) for TINY4412                            
                                                                                
                                                                                
CPU:    S5PC220 [Samsung SOC on SMP Platform Base on ARM CortexA9]              
        APLL = 1400MHz, MPLL = 800MHz                                           
                                                                                
Board:  TINY4412                                                                
DRAM:   1023 MiB                                                                
                                                                                
vdd_arm: 1.2                                                                    
vdd_int: 1.0                                                                    
vdd_mif: 1.1                                                                    
                                                                                
BL1 version:  N/A (TrustZone Enabled BSP)                                       
                                                                                
                                                                                
Checking Boot Mode ... SDMMC                                                    
REVISION: 1.1                                                                   
MMC Device 0: 7580 MB                                                           
MMC Device 1: 7456 MB                                                           
MMC Device 2: N/A                                                               
*** Warning - using default environment                                         
                                                                                
Net:    No ethernet found.                                                      
Hit any key to stop autoboot:  0 

//串口打印出来的信息还不是很准确,因为文件都是拷贝ORIGEN的。

发布了15 篇原创文章 · 获赞 0 · 访问量 394

猜你喜欢

转载自blog.csdn.net/mynameisJW/article/details/104308346