调试开发板的过程中,烧入了有问题的内核文件,设备启动后网络无法正常使用,设备本身无sd卡槽,此时可以通过uboot使用tftp的方式重新为开发板烧入内核;或者为了快速开发使用tftpboot的方式调试内核,加快开发速度,避免了每次烧写浪费时间。
-
安装
sudo apt-get install tftpd-hpa #tftp server
sudo apt-get install tftp-hpa #tftp client, for test
-
配置TFTP Server
mkdir -p /home/xxx/tftpboot # xxx为你的用户名
chmod 777 /home/xxx/tftpboot
sudo vim /etc/default/tftpd-hpa
内容修改为下图所示,其中TFTP_DIRECTORY修改为你刚刚创建的文件夹即可
修改“TFTP_DIRECTORY”为TFTP_Server服务目录,该目录最好具有可读可写权限
修改“TFTP_ADDRESS”为0.0.0.0:69,表示所有IP源都可以访问
修改“TFTP_OPTIONS”为“-l -c -s”。其中:
-l:以standalone/listen模式启动TFTP服务,而不是从xinetd启动
-c:可创建新文件。默认情况下TFTP只允许覆盖原有文件而不能创建新文件
-s:改变TFTP启动的根目录,加了-s后,客户端使用TFTP时,不再需要输入指定目录,填写文件的文件路径,而是使用配置文件中写好的目录。
-
重启TFTP _Server
sudo service tftpd-hpd restart
在重启TFTP_Server之前需创建完服务目录,也就是上一步中那个指定的文件夹,否则重启可能失败。
-
本机测试
输入:tftp 127.0.0.1
如果TFTP_Server运行正常,将显示tftp >
可以使用get命令从服务器下载文件,如get 1.txt
也可使用put命令上传文件至服务器,如put 1.txt
输入q退出tftp。
-
Uboot参数设置
setenv ipaddr 192.168.1.20 #设置开发板的本地IP
setenv serverip 192.168.1.103 #设置tftp server的IP,也就是你存放kernel之类的文件的tftp服务器地址
-
Uboot启动或者刷写内核
tftpboot #其中img镜像为uboot指定的名字
或者
tftp c0008000 zImage
erase 0x680000 +0x120000
cp.b c0008000 0x680000 0x120000;
这里c0008000是下载开发板里内存起始地址,zImage是需要下载的文件名称,0x680000是kernel的起始位置,0x120000是kernel的分区大小;具体值为多少和设备有关。