flex with 关键字用法

本文通过具体示例展示了如何利用with语句简化代码,并通过一个简单的极坐标转换函数说明了with语句的作用域优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下示例首先设置 someOther_mc 实例的 _x_y 属性,然后指示 someOther_mc 转到第 3 帧并停止。

 

同时访问一个作用域链列表中的多个项时,with 语句会很有用。在以下示例中,内置 Math 对象位于作用域链之前。将 Math 设置为默认对象可将标识符 cossinPI 分别解析为 Math.cosMath.sinMath.PI 。标识符 axyr polar() 的对象激活范围中,所以将解析为相应的局部变量。 不是 Math 对象的方法或属性,但由于它们位于函数

function polar(r:Number):void { 
    var a:Number, x:Number, y:Number; 
    
with

 (Math) { 
        a = PI * pow(r, 2); 
        x = r * cos(PI); 
        y = r * sin(PI / 2); 
    } 
    trace("area = " + a); 
    trace("x = " + x); 
    trace("y = " + y); 
} polar(3);
/* 
area = 28.2743338823081 
x = -3 
y = 3
*/
转载:http://xiejiangbo.iteye.com/blog/459350
with

 (someOther_mc) { 
    _x = 50; 
    _y = 100; 
    gotoAndStop(3); 
}

以下代码段显示在不使用 with 语句的情况下如何编写先前的代码。

someOther_mc._x = 50; 
someOther_mc._y = 100; 
someOther_mc.gotoAndStop(3);
<think>嗯,用户这次明确要查找Buildroot的使用方法和指南,包括配置、构建流程和相关文档。之前我注意到用户提问时还提到了"参考站内引用",但后续又说明那些引用只是参考,需要更多结合上下文。用户可能是开发者或嵌入式系统工程师,正在搭建嵌入式Linux环境。用户的需求很清晰:想要系统性的Buildroot实践指导。考虑到Buildroot是专业性较强的工具,可能需要从基础概念讲起。上次回答关于Buildroot的介绍比较简短,这次需要展开详细流程,尤其要突出实操步骤。首先应该强调官方文档的重要性,因为Buildroot更新频繁,第三方教程容易过时。用户要的"文档"不仅指静态手册,还包括官方提供的资源获取途径。配置环节需要详细说明menuconfig的操作逻辑,这是新手最容易卡住的地方。构建流程部分要注意风险点提示,比如网络问题导致下载失败、依赖冲突等常见坑。用户可能是在离线环境中工作,所以离线构建模式要单独说明。最后补充FAQ很必要,因为根据社区经验,PATH配置和文件权限问题能绊住80%的新手。突然想到用户没提具体硬件平台,但ARM体系架构的示例最具普适性。教程引用选择时要标注Linux社区项目链接,这样比纯文字描述更直观。对了,最后主动提出延伸帮助能更好满足潜在需求——用户看完教程后很可能需要实战支持。</think> 好的,Buildroot 是一个**功能强大且广泛使用的工具**,用于简化**嵌入式 Linux 系统**的交叉编译过程(从配置内核、根文件系统到生成可直接使用的镜像)。以下是基于其官方文档和社区最佳实践的**详细使用教程、配置指南和构建流程**核心要点:[^1] **核心概念 & 目标:** * **目标系统:** 为嵌入式设备(通常是非PC架构,如ARM, MIPS, PowerPC等)构建一个完整的、可启动的Linux系统。 * **宿主系统:** 执行Buildroot的机器(通常是x86_64 Linux PC)。 * **交叉编译:** 在宿主系统上生成目标系统架构的可执行程序。 * **产出:** 最终生成: * Linux 内核镜像 (`uImage`, `zImage`, `Image`, `bzImage` 等) * 根文件系统镜像 (`rootfs.tar`, `rootfs.cpio`, `rootfs.ext2/3/4`, `rootfs.squashfs`, `rootfs.jffs2` 等) * Bootloader(可选,如 U-Boot) * 包含所有构建结果的完整目录 (`output/images/`) * 包含可移植头文件和库的 SDK (`output/host/`) --- **核心使用流程与配置 (Step-by-Step)** 1. **准备宿主系统 (Prerequisites):** * **确保宿主系统满足要求:** * 推荐使用主流的 **Linux 发行版** (Ubuntu, Debian, Fedora, CentOS, Arch Linux 等)。 * 安装必要的构建工具和依赖库:`make`, `gcc/g++`, `libncurses-dev` (用于`menuconfig`界面), `bison`, `flex`, `python`, `perl`, `which`, `find`, `tar`, `gzip`, `bzip2`, `xz`, `patch`, `cpio`, `unzip`, `rsync`, `wget`, `git`, `bc`, `file` 等。 * **获取Buildroot源码:** * 强烈建议从官方 [Buildroot 下载页面](https://buildroot.org/downloads/) 获取**稳定版本 (`stable`) 或长期支持版本 (`LTS`)** 的 tarball。 * 或者克隆官方 Git 仓库获取最新开发版(但可能不稳定): ```bash git clone https://git.busybox.net/buildroot ``` 2. **配置目标系统 (Configuration):** * **启动配置界面 (图形化推荐):** ```bash cd /path/to/buildroot make menuconfig # 最常用,基于 ncurses 的文本界面 # 或者: make nconfig # 类似 menuconfig,但基于 `ncursew` 可能有更好体验 make xconfig # 基于 Qt 的 GUI (需要安装 Qt 开发库) make gconfig # 基于 GTK 的 GUI (需要安装 GTK 开发库) ``` * `menuconfig` 是最常用、依赖最少的界面。 * **关键配置项 (Target Options):** * `Target Architecture`:选择目标设备的CPU架构 (e.g., `ARM (little endian)`). * `Target Architecture Variant`:选择具体的CPU核心指令集 (e.g., `cortex-A9`). * `Target ABI`:选择应用二进制接口 (e.g., `EABIhf` for ARM with HW Float). * `Target Binary Format`: 通常 `ELF`。 * `Floating point strategy`:选择浮点支持方式 (`Soft`, `Hardware` VFP, `NEON` 等)。 * **关键配置项 (Build Options):** * `Location to download tarballs`: 包下载目录 (建议保留默认 `dl/`)。 * `Host utilities to install`:选择需要的宿主工具(如 `ccache` 可加速后续编译,强烈推荐)。 * `Enable compiler cache`:激活 `ccache`(若安装)。 * **关键配置项 (Toolchain):** * `Toolchain type`: * `Buildroot toolchain`:**默认且推荐**。Buildroot 会自动下载并构建完整的交叉编译工具链(gcc, binutils, libc 等)。 * `External toolchain`:如果已有预编译的交叉工具链(如 Linaro, CodeSourcery),可在此指定路径和类型。 * `C library`:选择使用的C库。`glibc` 功能最全,`uclibc-ng`/`musl` 更精简、对嵌入式更友好。 * **关键配置项 (System configuration):** * `Root filesystem overlay directories`:**重要!** 指定包含要覆盖/添加到目标根文件系统的额外文件/目录的路径(如你的启动脚本、自定义配置文件、软件预置数据)。 * `/dev management`: 选择 `/dev` 设备节点的管理方式 (常用 `Dynamic using devtmpfs + eudev`)。 * `Init system`: 选择 init 程序 (如 `BusyBox init`, `systemd`)。 * `Root password`: 设置目标系统 root 用户的密码(留空则为无密码)。 * **关键配置项 (Kernel):** * `Linux Kernel`: 选择 `Yes`。 * `Kernel version`: 指定版本号或自定义 git/tarball 位置。 * `Kernel configuration`: * `Using a defconfig`: 使用已有配置文件 (e.g., `imx_v7_defconfig` for NXP i.MX 7)。 * `Using an in-tree defconfig file`:选择内核源码树中的配置。 * `Using a custom config file`:指定你自己的 `config` 文件路径。 * `Kernel binary format`:选择需要的内核镜像格式 (e.g., `uImage` for U-Boot, `Image` for newer). * **关键配置项 (Target packages):** * 浏览 `Target packages` 菜单,**按需选择** 需要在目标系统上运行的软件包 (库和应用)。 * `Libraries -> Audio/Video handling`:选择音视频编解码库。 * `Libraries -> Graphics`:选择图形库 (e.g., `SDL`, `DirectFB`, `Qt5`)。 * `Libraries -> Networking`:选择网络库 (e.g., `openssl`, `libcurl`, `zlib`)。 * `Networking applications`:选择网络应用 (e.g., `dropbear` for SSH, `ntp`, `iperf3`)。 * `Text editors and viewers`:选择文本工具 (e.g., `nano`, `vim`, `less`)。 * `Filesystem images`:**重要!** 选择需要生成的根文件系统镜像格式 (e.g., `ext2/3/4`, `squashfs`, `jffs2`, `cpio`)。通常选 `ext4` 和一个只读格式如 `squashfs`。 * `Bootloaders`:如果 Buildroot 需要帮你编译 bootloader (如 U-Boot),在此配置。 * **保存配置:** * 配置完成后,按 `Exit` 或 `<OK>` 逐级退出,**最后选择 `Yes` 保存配置**。配置会保存为当前目录下的 `.config` 文件。可随时重新运行 `make menuconfig` 修改。 3. **开始构建 (Build):** ```bash cd /path/to/buildroot make # 开始构建过程,可以加 -jN (如 make -j8) 来使用多核加速编译 ``` * **过程详解:** 1. **下载:** Buildroot 根据配置,自动从官方网站/镜像下载所需的源码包(内核、工具链、目标软件包等)到 `dl/` 目录。**确保网络畅通**。 2. **工具链构建:** 如果选择了 `Buildroot toolchain`,这会是最耗时的步骤之一。Buildroot 构建完整的交叉编译器 (`gcc`, `binutils`) 和 C 库 (`glibc`/`uclibc-ng`/`musl`)。 3. **内核构建:** 使用刚生成的交叉工具链编译 Linux 内核。 4. **目标包构建:** 再次使用交叉工具链,**依次编译** 所有选中的目标软件包 (`busybox`, `openssh`, `qt5`, ...)。 5. **根文件系统生成:** * 创建根文件系统骨架。 * 安装目标包编译好的程序、库和配置文件。 * 应用 `Root filesystem overlay directories` (如果配置了)。 * 根据配置添加系统用户、设备节点、设置启动脚本等。 6. **生成镜像:** 将组装好的根文件系统内容打包成之前选择的格式(如 `rootfs.ext4`, `rootfs.squashfs`)。同时生成内核镜像 (`uImage`, `Image` 等) 和 bootloader (如果配置了)。 7. **生成 SDK:** 在 `output/host/` 目录下生成包含交叉编译工具链、目标系统头文件和库的 SDK。 * **构建输出:** 所有最终结果都放在 `output/` 目录下: * `images/`: **最重要的目录!** 包含可刷写或启动的镜像文件 (`uImage`, `rootfs.ext4`, `rootfs.squashfs` 等)。 * `build/`: 包含所有中间构建目录(内核、工具链、软件包源码和构建目录)。 * `target/`: 包含目标系统的**完整根文件系统内容**(安装好所有软件包和配置后)。这是生成 `images/` 里文件系统镜像的源。 * `host/`: 包含宿主系统使用的工具(构建工具链和SDK)。 4. **部署与使用 (Deployment):** * 将 `output/images/` 下生成的内核镜像 (`uImage`, `Image`, ...) 和根文件系统镜像 (`rootfs.ext4`, `rootfs.squashfs`, ...) 按照目标硬件平台的规范,**烧录到对应的存储介质** (eMMC, SD卡, SPI NOR/NAND Flash, USB Disk等)。 * 如果目标板需要 bootloader (U-Boot),通常也需要将其镜像放入对应的存储位置(启动顺序的第一阶段)。 * **启动目标板**,你应该能看到 Linux 启动信息和最终的 busybox shell (或你配置的 init/login 流程)。 * **使用SDK:** `output/host/` 下的工具链可以单独使用编译你自己的应用程序: ```bash export PATH=/path/to/buildroot/output/host/bin:$PATH # 使用交叉编译器 (前缀通常是 <arch>-linux-gnu- 或 <arch>-unknown-linux-<libc>-) arm-buildroot-linux-gnueabihf-gcc -o myapp myapp.c # 将生成的 myapp 复制到你的根文件系统覆盖层或通过 scp 传输到运行的目标板。 ``` --- **重要文档资源:** 1. **官方手册 (必读):** 位于Buildroot源码目录 `docs/manual/manual.pdf` 或在线访问 [Buildroot User Manual](https://buildroot.org/downloads/manual/manual.html)。这是最权威、最全面的指南,涵盖**所有配置选项、详细构建步骤、FAQ、技巧和原理说明**[^1]。 2. **快速入门指南 (Quick Start):** 文档中也包含一个 [Buildroot Quick Start Guide](https://buildroot.org/downloads/manual/manual.html#quick-start),提供最简化的配置和构建流程。 3. **官方培训材料 (External):** Buildroot开发者提供的培训幻灯片(搜索 `"buildroot training slides"` 通常能找到)。 4. **社区支持:** * **邮件列表:** 官方 [Buildroot 邮件列表](https://lists.buildroot.org/mailman/listinfo/buildroot) (`[email protected]`) 是获取帮助和讨论的主要渠道。提问前请阅读文档并用好搜索功能。 * **IRC:** `#buildroot` on Libera Chat。 * **Bug 跟踪:** [Bug Tracker](https://bugs.buildroot.org/)。 * **Wiki:** 非官方但可能有社区维护的Wiki页面(可用搜索引擎查找)。 **常见问题 & 技巧 (FAQ/Tips):** * **构建失败:** 最常见的原因是**依赖缺失**(宿主系统缺少某开发库)、**网络问题**(无法下载包源码)或**配置冲突**(启用了不兼容的软件包或选项)。检查终端输出的错误信息,搜索关键字或复制错误信息到邮件列表/Bug Tracker搜索。 * **更新配置后重新编译:** 如果只修改了 `.config` 文件(如增减软件包),再次运行 `make` 通常足够,Buildroot 会自动重新配置并只编译受影响的软件包。如果修改了内核配置 (`make linux-menuconfig`) 或 bootloader 配置 (`make uboot-menuconfig`),重新运行 `make` 会重新编译内核或bootloader。 * **彻底清理:** ```bash make clean # 清理所有构建的输出 (build/, target/), 保留配置 (.config) 和下载包 (dl/)。 make distclean # 彻底清理,删除所有构建内容(包括 dl/ 下载的包和 .config!)。除非必要,一般不需要。 ``` * **离线构建:** 首次成功构建后,可以将 `dl/` 目录完整备份。在无网络环境下,将此 `dl/` 目录复制到新的Buildroot源码目录下再进行配置和构建 (`make source` 会自动检查 `dl/` 中的文件而不下载)。 * **版本控制:** 将你的 Buildroot 配置 `.config` 文件和自定义的 `board/<yourcompany>/<yourboard>/` 目录(如果有板级支持包BSP)和 `overlay/` 目录纳入版本控制(如 git)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值