zoukankan      html  css  js  c++  java
  • 编译lua固件NodeMcu 8266

    https://www.cnblogs.com/yangfengwu/p/10547024.html

    因为我现在的Wifi的教程是lua语言编写的,但是有些功能需要自己编译lua固件才可以,这篇文章就详细说一下怎么编译固件

    准备一台linux的机子

    我把固件放到了git上,方便电脑用http下载

    我先用这个连接linux 

    大家随意哈,只要是一台linux的机子就可以,不管是图形页面还是命令行形式使用,只要自己可以操作就可以

    我用的是ubuntu16.4

    如果自己的ubuntu什么都没有安装,,先执行个命令

    apt-get update         更新一下软件库列表,其实是发行ubuntu的人们为咱把几乎所有可能用到的软件都放到了一个地方.咱执行这个命令,就可以把所有软件的https下载链接存起来,咱想安装某个软件的时候(假设调用的是Ubuntu自带的安装软件指令), 这样的话系统先检查你输入的是下载哪个软件的指令,然后找到相应的链接,然后下载下来安装

    有些指令我就不唠叨了,请自行百度,看看各自的指令到底是什么意思,很多东西其实都是一层纸(也有可能是钢板),只要你肯下功夫戳破.....

     安装另外一些软件

    apt-get install make gedit git tar unzip srecord python python-serial gcc g++             分开看(tar    unzip   ......自行百度都是干什么的)  

    gedit : 相当于记事本

    tar : 解压tar类型的压缩包

    unzip:解压zip类型的压缩包

    srecord:裁剪拼接文件用

    ...等等等等吧!!!自行百度去.....领进门,修行靠个人..

     

    进入opt文件夹,自己靠自己进去哈....

     不知道git  请

    https://www.cnblogs.com/yangfengwu/category/1462061.html      git是管理和开发的工具

     然后

    git clone https://gitee.com/yang456/NodemcuCompile.git     这是我上传到git的,方便编译固件

     

    cd NodemcuCompile

    ls

     

     nodemcu-firmware-2.0.0-master  这个是lua的源码

     xtensa-lx106-elf  这个是编译8266所需要的环境

    解压出来这两个文件 

    tar -xvf nodemcu-firmware-2.0.0-master.tar.bz2      

     

    接着解压

    tar -xvf  xtensa-lx106-elf-ccf1cfd2.tar.bz2

    ls

     修改下xtensa-lx106-elf  文件的权限,让文件可读可写,防止后续编译中出现没有权限问题

    文件是绿色就不用修改...大家自己百度文件颜色和对应的权限

    chmod -R 777 ./xtensa-lx106-elf                自行百度  ./    和 chmod    把xtensa-lx106-elf及其内部文件所有的权限都是可读可写

    设置环境环境     windows 都是鼠标点点点,键盘敲敲敲     linux就是键盘敲敲敲

     vim /etc/environment

    在文档的后面加上

     :/opt/NodemcuCompile/xtensa-lx106-elf/bin

    https://www.runoob.com/linux/linux-vim.html     vim命令看这个

    这是我一开始的

     先按键盘 i

    移动到上面的位置,输入

     

        

    source /etc/environment     立即生效环境变量

     echo $PATH     查看当前环境变量

    咱测试一下

    xtensa-lx106-elf-gcc -v

     

     为了防止编译出错,咱也设置 nodemcu-firmware-2.0.0-master  里面所有的权限

    chmod -R 777 ./nodemcu-firmware-2.0.0-master

    进入  nodemcu-firmware-2.0.0-master

    cd  nodemcu-firmware-2.0.0-master

    //解压esp-open-sdk.tar.xz
    tar -Jxvf tools/esp-open-sdk.tar.xz

    //配置环境变量
    export PATH=$PATH:$PWD/esp-open-sdk/xtensa-lx106-elf/bin

    //获取日期
    export BUILD_DATE=$(date +%Y%m%d)

    //编译
    make EXTRA_CCFLAGS="-DBUILD_DATE='"'$BUILD_DATE'"'" all

    好了

    现在清理一下工程

    make clean

    进入bin文件

    cd bin

    ls

     里面有两个bin

    一个从0x00000地址开始刷  一个从 0x10000  地址开始刷,刷进去这两个就是咱lua 开发的固件

      但是刷两个比较麻烦,,咱就把这两个合成一个

    //把0x00000和0x10000合成1.bin
    srec_cat -output "1.bin" -binary 0x00000.bin -binary -fill 0xff 0x00000 0x10000 0x10000.bin -binary -offset 0x10000

    说一下srec_cat 是文件合成指令

    -output "1.bin" -binary  给它说最后输出一个名字是1.bin的二进制文件(-binary)
    0x00000.bin -binary  找到第一个文件名字是0x00000.bin的二进制文件(-binary)
    -fill 0xff 0x00000 0x10000 先把0x00000到0x10000全部填充0xff(其实内部会先生成一个用于存储的文件)
    0x10000.bin -binary -offset 0x10000  找到第二个文件名字是0x10000.bin的二进制文件(-binary),设置合成的时候,
    把自己的地址偏移到0x10000开始

     现在这个1.bin就可以用了...不过现在如果用这个软件编译,如果要下载下来,要么用git 传上去,要么用ftp......

    怎么把linux上的文件弄下来自己百度去....

    然后刷进去

     

    接着说

    为了好叙述我还是用图形页面的linux说明....这个没有图形页面,叙述起来比较麻烦

     

     修改完最后别忘了点击保存

    然后向上面那样编译就可以

    不过后期的编译只需要

    //进入cd nodemcu-firmware-master

    //获取日期
    export BUILD_DATE=$(date +%Y%m%d)

    //编译
    make EXTRA_CCFLAGS="-DBUILD_DATE='"'$BUILD_DATE'"'" all

    //清理编译
    make clean

     然后到bin文件里面找到编译好的固件,下载到wifi里面就可以(可以先合成一个再下载,比较方便)

    //把0x00000和0x10000合成1.bin

    cd  bin
    srec_cat -output "1.bin" -binary 0x00000.bin -binary -fill 0xff 0x00000 0x10000 0x10000.bin -binary -offset 0x10000

    然后刷进去

    咱现在看另一个事情,

     

     一个一个的刷文件是不是感觉很不爽

    刷完固件刷程序,还要一个一个的下载......麻烦

    现在咱把咱写的lua程序打包进bin文件里面

    我就写个简单的文件测试测试给大家看,多

     然后把咱的程序文件放到

     然后编译

    //进入cd nodemcu-firmware-master

    //获取日期
    export BUILD_DATE=$(date +%Y%m%d)

    //编译
    make EXTRA_CCFLAGS="-DBUILD_DATE='"'$BUILD_DATE'"'" all

    //清理编译
    make clean

     然后咱看看bin文件里面

     现在下载的话可以

     程序默认一启动就运行了咱写的程序

     不过这样多麻烦,,我还是喜欢刷一个固件

    //进入bin目录
    cd bin

    //把0x00000和0x10000合成1.bin
    srec_cat -output "1.bin" -binary 0x00000.bin -binary -fill 0xff 0x00000 0x10000 0x10000.bin -binary -offset 0x10000

     

    //把0xa0000-32mb.bin和1.bin合成nodemcu_32mb.bin
    srec_cat -output "nodemcu_32mb.bin" -binary 1.bin -binary -fill 0xff 0x00000 0xa0000 0xa0000-32mb.bin -binary -offset 0xa0000

     

     好了,,最后下载这一个就可以了

     

    注意,由于程序文件大小不一样,所以这个地址也可能不一样

     

     我留下几个

    //把0x80000-8mb.bin和1.bin合成nodemcu_8mb.bin(有时候是0x70000注意自己的)
    srec_cat -output "nodemcu_8mb.bin" -binary 1.bin -binary -fill 0xff 0x00000 0x80000 0x80000-8mb.bin -binary -offset 0x80000


    //把0x80000-32mb.bin和1.bin合成nodemcu_32mb.bin
    srec_cat -output "nodemcu_32mb.bin" -binary 1.bin -binary -fill 0xff 0x00000 0x80000 0x80000-32mb.bin -binary -offset 0x80000

     

    //把0x70000-8mb.bin和1.bin合成nodemcu_8mb.bin
    srec_cat -output "nodemcu_8mb.bin" -binary 1.bin -binary -fill 0xff 0x00000 0x70000 0x70000-8mb.bin -binary -offset 0x70000

    //把0x70000-32mb.bin和1.bin合成nodemcu_32mb.bin
    srec_cat -output "nodemcu_32mb.bin" -binary 1.bin -binary -fill 0xff 0x00000 0x70000 0x70000-32mb.bin -binary -offset 0x70000

     

    //把0xb0000-8mb.bin和1.bin合成nodemcu_8mb.bin
    srec_cat -output "nodemcu_8mb.bin" -binary 1.bin -binary -fill 0xff 0x00000 0xb0000 0xb0000-8mb.bin -binary -offset 0xb0000

    //把0xb0000-32mb.bin和1.bin合成nodemcu_32mb.bin
    srec_cat -output "nodemcu_32mb.bin" -binary 1.bin -binary -fill 0xff 0x00000 0xb0000 0xb0000-32mb.bin -binary -offset 0xb0000

    注意:

    如果把自己的程序打包进bin下载的那么清除程序的时候

     清除不了程序

    你需要

     

  • 相关阅读:
    从零开始学asyncio(中)
    从零开始学asyncio(上)
    Java 后台多次获取requestBody
    Swift中的构造器
    CIDetector 相册识别二维码出错
    Swift-类和结构体
    定时器的使用以及注意事项
    ios-视图控制器跳转时生命周期的调用
    使用NSString的一些注意事项
    CALayer的锚点
  • 原文地址:https://www.cnblogs.com/yangfengwu/p/10840517.html
Copyright © 2011-2022 走看看