STM32实验及结果 —— (013)OpenWrt交叉编译
»
(001)HAL库LED点灯
(002)HAL库LCD帧动画
(003)HAL库FFT动态频谱
(004)HAL库FFT Speed Up
(005)HAL库认识DMA
(006)看门狗总结
(007)GPIO使用步骤
(008)CubeIDE实现USB外设*
(009)为什么C99
(010)Linux UDP广播注意事项
(011)Linux非阻塞TCP
(012)ARM架构防烧脚本
(013)OpenWrt交叉编译
(014)C99基本数据类型
(015)C99 结构体
(016)C99 枚举
(017)C99 的函数及左值右值
(018)C99 的指针*
(019)C99 只有值赋值,没有move*
(020)C99 数组及结构体中的数组存储空间
(021)C99标准函数库没有函数模板
(022)POSIX线程库pthread的同步锁*
(023)POSIX线程库pthread的多线程*
(024)C99的条件语句
(025)C99的选择语句
(026)C99的循环语句
(027)C99标准库中的计时与等待 *
(028)C语言中的高精度计算库GMP *
(029)C语言中的Web服务*
(030)C语言中的字符转码ICU*
(031)从几个方面显然C语言比C++效率高*
(032)C99中的弱函数weak
(033)MTU TCP SOCKET
(034)STM32 UART连续发送数据函数
(035)STM32 UART连续接收数据函数
(036)STM32重定向printf输出到USART的方法
(037)STM32 Normal与Circle
(038)STM32 UART传输错误标志位的清除
(039)STM32 UART传输空闲中断
(040)STM32 串口、RS232是单根线发数据
(041)STM32 RS485差分信号通信
(042)STM32 等待DMA传输完成指定的字节数
(043)STM32进入低功耗模式
(044)DMA传输完成中断需要清空TCx标志位
(045)单字节中断HAL_UART_RxCpltCallback
(046)在单字节完成中断中处理Idle
(046)C99内置宏
🍓(001)关闭交换分区
🍓(002)格式化U盘为ext4并设定块大小为1k
🍓(003)获取linux版本信息及硬件架构信息
🍓(004)最新版Ubuntu加速
🍓(005)不稳定网络克隆360浏览器内核脚本
🍓(006)Ubuntu24.04无法运行firefox注意事项
🍓(007)MAC地址
🍓(008)RMII和PHY
🍓(009)Ubuntu Server防火墙配置
🍓(010)Linux主动让出CPU
🍓(011)Linux硬件概念
🍓(012)Linux系统中的进程间通信
🕹️(001)while(1){}不会让出CPU
🕹️(002)FreeRTOS主要函数
🕹️(003)FreeRTOS临界区ENTER_CRITICAL
🕹️(004)FreeRTOS NULL未定义问题的解决
🕹️(005)优先级最低的ARM硬件中断PENDSV
🕹️(006)任务优先级层数配置
🕹️(007)不同优先级任务创建注意事项
🕹️(008)关闭同级任务的时间片轮转
🕹️(009)OTA技术
🕹️(010)FreeRTOS静态任务创建
🕹️(011)FreeRTOS列出任务列表
🕹️(012)FreeRTOS堆空间使用量统计
🕹️(013)FreeRTOS通过任务名获取TaskHandle
🕹️(014)FreeRTOS常用任务创建方式
🕹️(015)FreeRTOS解决优先级反转的任务死锁
🕹️(016)FreeRTOS超级中断:SVC
🕹️(017)FreeRTOS中断处理函数运行在特权级
🕹️(018)FreeRTOS SVC进入用户模式的方法
🕹️(019)FreeRTOS实现绝对时间间隔开始任务
🕹️(020)FreeRTOS低功耗通过Tickless实现
🕹️(021)FreeRTOS IdleHook
🕹️(022)FreeRTOS Hooks
🕹️(023)FreeRTOS主动让出CPU
🕹️(024)FreeRTOS信号量
🕹️(025)FreeRTOS解决优先级反转问题的方法
🕹️(026)FreeRTOS获得任务的优先级
🕹️(027)FreeRTOS设置任务的优先级
🕹️(028)FreeRTOS中函数的前缀
🕹️(029)硬件中断中不能调用FreeRTOS的函数
🕹️(030)底半操作的任务接收信号量处理数据
🕹️(031)启用无限期等待
🕹️(032)中断处理函数中调用FreeRTOS的函数
🕹️(033)对于FreeRTOS顶半与底半操作的原则
🕹️(034)STM32中的FATFS支持exFat
🕹️(035)FreeRTOS中的消息队列
🕹️(036)FreeRTOS中的定时任务
🕹️(037)默认生成代码没法ping板子的原因
🕹️(038)LwIP Tcp Server开发例程
    一个概念:交叉编译、cross-compilation,英文原意:跨平台编译。
    也就是在x86_64架构的操作系统上编译arm32架构的操作系统上运行的程序或者在x86_64架构的操作系统上编译arm64架构的操作系统上运行的程序。

    下面是x86_64架构下的OpenWrt交叉编译过程:

    1. 在OpenWrt官网下载对应的toolchain工具包,并解压缩到/home/xxx/toolchain-aarch64_cortex-a72_gcc-12.3.0_musl/目录

    2.后续使用root账号操作
    sudo su
    [输入root账号密码]

    3.在终端中运行以下命令设置环境变量的:
    PATH=$PATH:/home/xxx/toolchain-aarch64_cortex-a72_gcc-12.3.0_musl/bin
    export PATH
    STAGING_DIR=/home/xxx/toolchain-aarch64_cortex-a72_gcc-12.3.0_musl
    export STAGING_DIR

    4.下载OpenWrt源码:
    git clone https://git.openwrt.org/openwrt/openwrt.git
    git checkout v23.05.5

    5.安装需要的软件包
    cd openwrt
    ./scripts/feeds update -a
    cd ../
    mkdir host
    mkdir build
    ./scripts/feeds install -a

    6.开始openwrt的编译配置(进入视频上的熟悉界面-编译配置界面)
    make menuconfig

界面如下

 .config - OpenWrt Configuration
 ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  ┌───────────────────────────────────────────────────── OpenWrt Configuration ──────────────────────────────────────────────────────┐
  │  Arrow keys navigate the menu.  <Enter> selects submenus ---> (or empty submenus ----).  Highlighted letters are hotkeys.        │  
  │  Pressing <Y> includes, <N> excludes, <M> modularizes features.  Press <Esc><Esc> to exit, <?> for Help, </> for Search.         │  
  │  Legend: [*] built-in  [ ] excluded  <M> module  < > module capable                                                              │  
  │                                                                                                                                  │  
  │ ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │  
  │ │                                Target System (Atheros ATH79)  --->                                                           │ │  
  │ │                                Subtarget (Generic)  --->                                                                     │ │  
  │ │                                Target Profile (8devices Carambola2)  --->                                                    │ │  
  │ │                                Target Images  --->                                                                           │ │  
  │ │                            [ ] Enable experimental features by default (NEW)                                                 │ │  
  │ │                                Global build settings  --->                                                                   │ │  
  │ │                            [ ] Advanced configuration options (for developers) (NEW)  ----                                   │ │  
  │ │                            [ ] Build the OpenWrt Image Builder (NEW)                                                         │ │  
  │ │                            [ ] Build the OpenWrt SDK (NEW)                                                                   │ │  
  │ │                            [ ] Package the OpenWrt-based Toolchain (NEW)                                                     │ │  
  │ └────────────────────────────v(+)──────────────────────────────────────────────────────────────────────────────────────────────┘ │  
  ├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤  
  │                                     <Select>    < Exit >    < Help >    < Save >    < Load >                                     │  
  └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘  
    
    7.配置过程中指定目标硬件主板以及其他配置项后Save、Exit

    8.Exit后,开始编译
    FORCE_UNSAFE_CONFIGURE=1
    export FORCE_UNSAFE_CONFIGURE
    make -j4 V=s

    9.make后,系统会生成您勾选的镜像文件

    10.用烧写工具烧写到SD卡,将SD卡插入树莓派4B主板,即可让树莓派4B变成OpenWrt路由器。

    musl/gdb-12.1/gdb/data-directory/python': No such file or directory的问题的解决:
    ln -s -f /usr/local/bin/python3 /usr/local/bin/python

    附注:
    什么是eabi?为什么要使用交叉编译?
    eabi就是Embeded Application Binary Interface,也就是嵌入式应用程序二进制接口。和STM32一样,OpenWrt用的也是eabi,那个toolchain的gcc也就是arm版的交叉编译eabi。使用eabi和交叉编译,是因为,stm32的简单芯片不具备编译环境或者芯片上的编译环境的速度比不上PC机上的编译速度,比如:arm64的树莓派4B性能没有x86_64的PC机性能高。
«
——张人杰·www.v-signon.com学习者共勉
返回上一页
备案号:京ICP备19038994号-2
个人作品网站:www.up-task.com 主办:个人 English
免责声明:本网站3d地球模型购买自3d.3d66.com,如权利人发现存在误传其作品情形,请及时与本站联系。