STM32MP157系列教程连载-Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

本文详细介绍了如何在STM32MP157微处理器上移植和配置Linux内核,包括解压内核源码、应用ST官方补丁、生成配置文件、内核编译、模块编译、设备树生成等步骤。通过tftp下载方式验证编译结果,并提供了设备树文件的具体内容和修改。

STM32MP157系列教程连载-Linux系统移植篇8:STM32MP1微处理器之Linux内核配置及编译

第 1 章 Linux内核配置及编译

1.1 解压内核
建立源码目录

linux@ubuntu:$ cd ~/FS-MP1A/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.4.31-r0

在这里插入图片描述
该目录下以patch结尾的文件为ST官方提供的补丁文件,linux-5.4.31.tar.xz为标准linux源码包。
解压标准内核源码包

linux@ubuntu:$ tar -xvf linux-5.4.31.tar.xz

在这里插入图片描述
进入内核源码目录下

linux@ubuntu:$ cd linux-5.4.31

在这里插入图片描述
1.2 添加STMicroelectronics官方补丁

解压linux内核源码后得到的是Linux社区的标准内核源码,接下来需要将ST官方提供的源码补丁添加到标准内核中。

linux@ubuntu:$ for p in `ls -1 ../*.patch`; do patch -p1 < $p; done

该命令会将上层目录下所有的patch补丁文件应用到当前的内核中。

1.3 生成标准板配置文件
生成multi_v7_defconfig默认配置

linux@ubuntu:$ make ARCH=arm multi_v7_defconfig "fragment*.config"

在默认multi_v7_defconfig配置中加入ST官方提供的fragment config

linux@ubuntu:$ for f in `ls -1 ../fragment*.config`; do scripts/kconfig/merge_config.sh -m -r .config $f; done
linux@ubuntu:$ yes '' | make ARCH=arm oldconfig

生成自己的默认配置文件

linux@ubuntu:$ cp .config arch/arm/configs/stm32_fsmp1a_defconfig

取消git中的SHA1

linux@ubuntu:$ echo "" > .scmversion

1.4 配置内核
导入交叉编译工具链(如果还未安装SDK可参考《SDK工具链安装》章节进行安装)

linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

验证开发工具是否安装正确,显示版本信息如下图所示。

linux@ubuntu:$ $CC --version

在这里插入图片描述
在编译前如果需要编译额外的功能或者驱动,可以使用meunconfig来对内核进行配置。

linux@ubuntu:$ make menuconfig

在这里插入图片描述
可以在如上菜单中对内核进行详细的配置。
1.5 编译内核

linux@ubuntu:$ make -j4 ARCH=arm uImage vmlinux LOADADDR=0xC2000040

在这里插入图片描述
编译后在内核源码目录下,能够在生成一个vmlinux文件,该文件是没有经过压缩的内核镜像,这个镜像导出了所有的内核符号可以用作仿真调试。
在这里插入图片描述
此外在arch/arm/boot目录下还生成了一个uImage文件,这就是经过压缩的内核镜像。可以用作系统启动。
在这里插入图片描述
1.6 编译内核模块

linux@ubuntu:$ make ARCH=arm modules

该操作会将内核中配置为模块的源码进行编译,最终得到ko文件。

<think>好的,我现在需要回答用户的问题:如何在URL中编码和传递HTML标签信息的最佳实践。首先,我得理解用户的需求。用户可能想要在URL参数中包含HTML标签,比如传递一段富文本或者结构化的数据,但需要确保这些信息在传输过程中不会出错或被误解。 首先,URL中只能包含特定字符,其他字符需要进行编码。HTML标签包含尖括号<>等特殊字符,这些字符在URL中是非法的,必须进行百分比编码。例如,< 应该被编码为%3C,> 被编码为%3E。所以第一步应该是使用像JavaScript中的encodeURIComponent或者类似函数对参数进行编码。 接下来,我得考虑安全性问题。直接在URL中传递HTML标签可能存在XSS(跨站脚本攻击)的风险。如果接收方未对数据进行适当的转义或过滤,可能导致脚本注入。因此,建议在服务器端对接收的参数进行严格的验证和清理,使用安全的库来处理HTML内容,比如Python的bleach库或者PHP的htmlspecialchars函数。 然后,关于最佳实践,用户可能想知道是否有更安全或更高效的方法。例如,使用Base64编码可以处理更复杂的数据,但需要两端进行编解码,并且会增加数据长度。另外,如果传输的数据量较大,URL的长度限制可能会成为问题(通常建议不超过2048字符),这时候可能需要改用POST请求,通过请求体发送数据,而不是放在URL中。 还需要考虑不同编程语言中的处理方式。比如在JavaScript中,encodeURIComponent会处理所有特殊字符,而在PHP中可以使用urlencode函数。同时,接收端需要对参数进行解码,比如使用decodeURIComponent。 另外,引用中提到的URL.revokeObjectURL()可能与这个问题关系不大,但可以提醒用户在处理动态生成的URL时注意内存管理,不过这可能属于更高级的应用场景。 最后,需要综合这些点,给出步骤化的建议,并强调安全性、编码方法和替代方案。可能还需要提到避免直接将未编码的HTML放在URL中,以及使用合适的HTTP方法(如POST)处理大量数据。</think>### 如何通过URL编码和传递HTML标签信息 #### 1. **编码HTML标签** 在URL中传递HTML标签时,必须对特殊字符进行**百分比编码**(Percent-Encoding),否则可能引发格式错误或安全漏洞。例如: - `<` 编码为 `%3C` - `>` 编码为 `%3E` - 空格编码为 `%20` 或 `+` **示例**: 假设要传递 `<div class="content">Hello</div>`,需先编码为: ``` %3Cdiv%20class%3D%22content%22%3EHello%3C%2Fdiv%3E ``` **实现方法**: - **JavaScript**:使用 `encodeURIComponent()` 函数: ```javascript const encoded = encodeURIComponent("<div>Hello</div>"); // 输出: "%3Cdiv%3EHello%3C%2Fdiv%3E" ``` - **Python**:使用 `urllib.parse.quote`: ```python from urllib.parse import quote encoded = quote('<div>Hello</div>') # 输出: "%3Cdiv%3EHello%3C/div%3E" ``` #### 2. **安全性与验证** 直接在URL中传递HTML标签可能引入**XSS攻击**风险[^1]。需在接收端进行严格处理: - **服务器端过滤**:使用安全库清理HTML(如Python的 `bleach`): ```python import bleach cleaned_html = bleach.clean(raw_html, tags=['div', 'span'], attributes={'div': ['class']}) ``` - **客户端转义**:展示时通过 `textContent` 或类似方法避免直接渲染未验证内容。 #### 3. **替代方案:Base64编码** 若需传递复杂内容,可先用Base64编码,减少特殊字符干扰: ```javascript // JavaScript示例 const html = "<div>Hello</div>"; const base64 = btoa(unescape(encodeURIComponent(html))); // 编码 const decoded = decodeURIComponent(escape(atob(base64))); // 解码 ``` **注意**:Base64会增加数据长度,需确保URL不超过浏览器限制(通常约2000字符)。 #### 4. **HTTP方法选择** - 少量数据:使用 **GET**,参数附加在URL后。 - 大量或敏感数据:改用 **POST**,通过请求体传输,避免URL暴露风险[^3]。 #### 5. **完整示例** 假设通过URL传递 `<span>Test</span>`: 1. **编码**:`%3Cspan%3ETest%3C%2Fspan%3E` 2. **URL拼接**:`https://example.com?data=%3Cspan%3ETest%3C%2Fspan%3E` 3. **服务器解码**: ```python from urllib.parse import unquote raw_data = unquote(request.GET.get('data')) ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值