Linux系统移植之u-boot的烧写及使用

实验二 u-boot的烧写及使用

【实验目的】

了解u-boot常用命令和linux内核的引导

【实验环境】

1、 ubuntu 12.04发行版

2、 u-boot-2010.03

3、 FS4412平台

4、 交叉编译器 arm-none-linux-gnueabi-gcc

【实验步骤】

1、 SD启动盘制作

a) 将第一天/工具/ sd_fusing拷贝到Linux

b) SD卡插入电脑并识别

c) 进入sdfuse_d执行如下操作

$ sudo ./mkuboot.sh  /dev/sdb

d) SD卡中创建目录sdupdate并把第一天/镜像中的u-boot-fs4412.bin拷贝到这个目录下

2、 u-boot的烧写

a) 连接串口和板子,运行串口通信程序(putty第一天工具中)

 

选择右上角的”Serial”,然后点击左下角的Serial

 

按照自己的主机的情况选择COM口其他必须一直,然后点击open打开串口

 

b) 关闭开发板电源,将拨码开关SW1调至(1000)(SD启动模式)后打开电源

c) 将刚才做好的SD启动盘插入SD卡插槽

d) 重新打开开发板能够看到如下界面

 

在倒计时时按任意键

e) 烧写

在终端上执行

sdfuse flashall

等待终端无输出是表示烧写结束

f) 关闭开发板电源,将拨码开关SW1调至0110(EMMC启动模式)后打开电源可以看到如下界面表示烧写成功

 

在倒计时时按任意键

 

3、 通过网络加载内核和文件系统

a)  第一天/镜像文件/uImage拷贝到ubuntu/tftpboot

b)  第一天/镜像文件/rootfs.tar.xz拷贝到ubuntu/source下并解压

c)  第一天/镜像文件/exynos4412-fs4412.dtb拷贝到ubuntu/tftpboot

d) 修改虚拟机nfs配置文件/etc/exports,添加如下内容并重启nfs服务

/source/rootfs  *(rw,sync,no_subtree_check,no_root_squash)

e) 重新驱动nfs服务

$ sudo /etc/init.d/nfs-kernel-server restart

f) 设置启动参数

# setenv serverip 192.168.9.120

# setenv ipaddr 192.168.9.233

# setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm 41000000 - 42000000

#setenv bootargs root=/dev/nfs nfsroot=192.168.9.120:/source/rootfs rw console=ttySAC2,115200  init=/linuxrc  ip=192.168.9.233

# saveenv

注意:192.168.9.120 对应Ubuntuip

 192.168.9.233 对应板子的ip

      这两个ip应该根据自己的实际情况适当修改

 

g) 启动开发板看到如下现象表示成功通过网络挂载:

 

 

这是可以输入一些Linux的命令测试

 

4、 EMMC加载内核和文件系统

a) 拷贝第一天/镜像文件/ramdisk.img拷贝到虚拟机/tftpboot目录下

b) 烧写内核镜像到EMMC

# tftp  41000000  uImage

# movi  write  kernel  41000000

 

c) 烧写设备树文件到EMMC

# tftp  41000000  exynos4412-fs4412.dtb

# movi  write  dtb  41000000

 

d) 烧写文件系统镜像到EMMC

# tftp  41000000  ramdisk.img

# movi  write  rootfs  41000000  300000

 

e) 设置启动参数

# setenv bootcmd movi read kernel 41000000\;movi read dtb 42000000\;movi read rootfs 43000000 300000\;bootm 41000000 43000000 42000000

# saveenv

 

f) 重新启动开发板,u-boot自动加载、执行内核

 

5、 其他命令练习

 

6、 交叉编译和交叉调试

a) u-boot启动参数修改为网络启动

# setenv serverip 192.168.9.120

# setenv ipaddr 192.168.9.233

# setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm 41000000 - 42000000

#setenv bootargs root=/dev/nfs nfsroot=192.168.9.120:/source/rootfs rw console=ttySAC2,115200  init=/linuxrc  ip=192.168.9.233

# saveenv

注意:192.168.9.120 对应Ubuntuip

  192.168.9.233 对应板子的ip

      这两个ip应该根据自己的实际情况适当修改

b) 编辑程序源码myapp.c(自己写一个简单的c程序)

c) 交叉编译后复制到/source/rootfs   (编译时添加选项-g)

$ arm-none-linux-gnueabi-gcc myapp.c o myapp g

$ cp myapp /source/rootfs

d) 复制gdbserver/source/rootfs/bin    (gdbserver在交叉工具链中找,路径为:/home/linux/toolchain/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/debug-root/bin)

e) 在开发板上如下运行

# gdbserver  192.168.9.233:12345  myapp &

f) 在主机上运行交叉调试器

$ arm-none-linux-gnueabi-gdb  myapp

g) 在交叉调试器下和开发板gdbserver建立连接

(gdb)  target  remote  192.168.9.233:12345

设置断点,输入命令c开始调试程序(注意观察串口输出)

你可能感兴趣的:(Linux系统移植,u-boot的烧写)