拿到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行发生了这个错误
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的。