当前位置 博文首页 > 好习惯成就伟大:嵌入式Linux固件升级
嵌入式Linux固件升级
??基于TCP/IP完成驱动模块和应用程序的更新、升级
该文档中驱动程序和应用程序统称为“固件”。
?
??主??机:VMWare--Fedora 9
??开发板:yc2440--64MB Nandflash;Kernel:2.6.24.4
??编译器:arm-linux-gcc-4.0.0
?
?
?
说明:
???开发板启动FileServer应用程序,作为TCP/IP的Server端,提供接收升级文件的服务。
??当需要进行固件升级时,PC启动FileClient应用程序,作为TCP/IP的Client端,提供发送升级文件的服务。
??Shell脚本文件StartShell判断是否有固件需要升级,如果有更新现有固件后,启动更新后的固件,如果没有,启动现有固件。
?
文件名称 | 所在目录 | 功能 |
FileClient | Linux PC下任意目录 | PC机TCP/IP客户端, 向开发板发送升级固件。 |
FileServer | Linux开发板 /tmp/update/ | 开发板TCP/IP服务端, 接收客户端发送的升级固件。 |
StartShell | Linux开发板 /etc/init.d/ | 替换相应固件, 启动相应固件。 |
?
1.??????配置启动文件(开发板:192.168.1.168)
在开发板中,编辑开机启动脚本/etc/init.d/rcS
#cp ~/StartShell /etc/init.d/
#vi /etc/init.d/rcS
?
在该文件的最后面,填写下面信息:
./StartShell
?
重新启动开发板。
?
2.??????发送更新文件文件(Linux PC:192.168.1.200)
#./fileclient ./AppMain 192.168.1.168
#./fileclient ./helloworld.ko 192.168.1.168
?
上述更新文件,被发送至开发板的/tmp/update/(FileServer所在的目录)目录中。
?
重新启动开发板,文件升级完成。
?
注:如果要动态加载驱动模块,首先必须在开发板上创建/lib/modules/2.6.24.4目录。
???TCP/IP源码文件
http://download.csdn.net/source/2996852
?
注:TCP/IP?服务尽量使用大端口号,如:50000,否则服务器端会有Bind失败的情况出现。
服务器端如果有防火墙,需要开放该端口号,否则客户端会有connect失败的情况出现。
?
??StartShell脚本
?
#! /bin/sh
?
#判断是否有新的驱动文件,如果有进行替换
if [ -f /tmp/update/helloworld.ko ]
then
????????echo "it is a new ko file"
?
????????rm /lib/modules/helloworld.ko -f
????????cp /tmp/update/helloworld.ko /lib/modules/
????????rm /tmp/update/helloworld.ko -f
?
else
????????echo "it is not a new ko file"
fi
?
insmod helloworld
#判断是否有新的应用程序文件,如果有进行替换
if [ -f /tmp/update/AppMain ]? ??
then
????????echo "it is a new app file"
?
????????rm /root/application/AppMain -f
????????cp /tmp/update/AppMain /root/application/
????????chmod 777 /tmp/update/AppMain
????????rm /tmp/update/AppMain -f
??????????????
else
????????echo "it is not a new app file"
fi
?
#启动应用程序
cd /root/application/
./AppMain &
?
#启动TCP/IP服务程序
cd /tmp/update/
./FileServer &
?
?
?
Embedded Linux firmware upgrade?
Development requirement
? Based on TCP/IP to complete the driver modules and application updates, upgrades?
Special Statement?
Drivers program and application program in this document are collectively called the "firmware".?
? Main machine: VMWare-Fedora 9?
? Development Board: yc2440-64MB Nandflash; Kernel: 2.6.24.4?
? Compiler: arm-linux-gcc-4.0.0?
Design schematic
?
Description:?
? Start FileServer application on development board, as the TCP/IP server, providing service to receive the upgrade file.?
? When you need a firmware upgrade, PC starts FileClient application, as the TCP/IP client, providing service to send the upgrade file.?
? Shell script file StartShell determine whether there is the firmware need to upgrade, if it is existed, launch the updated firmware, if not, start the existing firmware.?
File | directory | function |
FileClient | any directory?in linux PC | PC TCP/IP client,? |
FileServer | /tmp/update/ in linux?development board | Development board?TCP/IP server, receive the upgrade firmware from client. |
StartShell | /etc/init.d/ in linux development board | Replace firmware, Start frimware. |
Implementation steps?
1. Configuration startup files (development board: 192.168.1.168)?
In the development board, edit the boot script file /etc/init.d/rcS, input the following information:?
# cp ~ /StartShell /etc/init.d/?
# vi /etc/init.d/rcS?
Finally, in the end of the document, input the following information:?
?
./StartShell?
Restart the development board.?
2. Send the update file file (Linux PC: 192.168.1.200)?
#./Fileclient ./AppMain 192.168.1.168?
#./Fileclient ./Helloworld.ko 192.168.1.168?
The update file is sent to the development board of the /tmp/update/(FileServer??directory) directory.?
Restart the development board, file upgrade is OK.?
Note:?If you want to dynamically load the driver module, first the directory /lib/modules/2.6.24.4 must be created in development board.
Attachment:?
? TCP/IP source code file
http://download.csdn.net/source/2996852?
Note:?TCP/IP service port to make use of large numbers, such as: 50000, otherwise there will be bind server failure situation.?
If the server has a firewall, you need to open up the port number, otherwise the client will connect failure situation.?
? StartShell script
#! /bin/sh?
# Determine whether there is a new driver file, if there is to be replaced?
if [ -f /tmp/update/helloworld.ko ]?
then?
????????echo "it is a new ko file"?
????????rm /lib/modules/helloworld.ko -f?
????????cp /tmp/update/helloworld.ko /lib/modules/?
????????rm /tmp/update/helloworld.ko -f?
else?
????????echo "it is not a new ko file"?
fi?
insmod helloworld?
# Determine whether there is a new application file, if there is to be replaced?
if [ -f /tmp/update/AppMain ]?
then?
????????echo "it is a new app file"?
????????rm /root/application/AppMain -f?
????????cp /tmp/update/AppMain /root/application/?
????????chmod 777 /tmp/update/AppMain?
????????rm /tmp/update/AppMain -f?
else?
????????echo "it is not a new app file"?
fi?
# Start the application program?
cd /root/application/?
./AppMain &
# Start TCP/IP service program?
cd /tmp/update/?
./FileServer &