当前位置 博文首页 > 好习惯成就伟大:嵌入式Linux固件升级

    好习惯成就伟大:嵌入式Linux固件升级

    作者:[db:作者] 时间:2021-07-09 18:59

    嵌入式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,?
    Send upgrade firmware to??development board.

    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 &


    cs
    下一篇:没有了