【转载】Linux Kernel 和 U-Boot 编译的那些事

buildroot三分钟入门,修改文件,对内核进行编译 之前编写驱动都是自己单独编译内核,看完粤嵌GEC6818的文档傻眼了,用的是buildroot,好像和别人的buildroot还不一样 一般来说应该是先进入build root make help make linux-menuconfig 就和以前一样可以进行 menuconfig 想给内核去掉一个驱动 找到编译脚本,对命令进行查看 进入6818的源码包没有那个选项,只能去看shell脚本,看是怎么进行编译的 解压完后,有个可执行的mk文件 ,好就是他了 在里面找到内核编译的脚本 export 阅读详情

转载自:HackforFun HackforFun 2019-10-26 

作者注:文中图片都进行了拷贝,主要是防止原文删除后造成的图片引用丢失,而水印是优快云系统所加,重申本人尊重原创。

之前的文章:《一次搞定交叉编译》 给大家讲了如何安装交叉编译工具链,搭建交叉编译环境。

这篇文章主要教大家如何正确的去编译 Linux Kernel、U-Boot 这些著名的开源软件。

也许很多同学会说:编译是小 case 啊,我都 make 过成千上万次了!

可是你是否有思考过,你编译的时候每一个步骤、执行的每一个命令.....

它背后隐藏的原理是什么?为什么要这么做?你的方法是最高效最科学的吗?你的方法是否潜藏着漏洞?

换一个环境、换一个平台,如果编译的过程中遇到了莫名其妙的错误,你是否知道从哪里去找突破口?

这就是这篇文章要告诉你的。

编译 Linux Kernel

还是以 i.MX 的内核为例。

其实过程很简单,基本上两个命令搞定:

make ARCH=arm imx_v7_defconfig

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

第一个命令是配置,第二个命令是编译。

但是这背后却隐藏着很多小细节需要我们去注意。

  1. ### 配置内核

配置内核的命令是 make ARCH=chiparch xxx_defconfig ,第一个参数 ARCH=chiparch 用来指定芯片的架构,第二个参数 xxx_defconfig 用来指定这次编译对应的配置文件,比如针对 i.MX6、i.MX7 这些芯片的 Linux Kernel,配置命令是这样的:

make ARCH=arm imx_v7_defconfig

如果编译 i.MX8 相关的内核的话,配置命令大概是这样的:

make ARCH=arm64 defconfig

这个命令会从指定的 defconfig 文件里面加载配置,写入到 .config 文件中。内核编译的时候就是根据 .config 文件的内容来决定哪些模块编译,哪些模块不编译的。

make 后面的两个参数是怎么来的?

因为 Linux Kernel 支持大量不同架构的芯片、比如 arm、arm64、x86、mips、risc-v 等等,还支持成千上万的功能特性,在编译的时候我们并不需要把内核支持的所有芯片和功能都编译进去,这样编译出来的内核镜像会非常的庞大。而且 Kernel 中有相当一部分代码是针对特定架构的,比如启动阶段的初始化代码、每个架构都有自己特定的设置,这部分代码大部分是汇编写的,而且相互不兼容:

arch/arm64/kernel/head.s
arch/arm/kernel/head.s
arch/mips/kernel/head.s
arch/riscv/kernel/head.s
arch/x86/kernel/head_64.s

所以,Linux 内核提供了 defconfig 机制 ,开发者们可以根据自己的芯片、开发板特性自己决定内核中哪些功能需要打开,哪些功能可以关闭,生成一个和自己硬件相关的 defconfig 文件,下次编译的时候加载。这些 defconfig 文件放在 arch/chiparch/configs 下面:

<memo: 要打开chip的某个模块,可以在defconfig中查找模块对应的宏? 待验证>

所以在配置的时候,我们需要指定具体的 ARCH、Kernel 的 Kbuild 系统才能在对应的目录下找到你指定的 defconfig 文件。如果没有指定 ARCH、一般默认会去 x86 目录下去找。

因为 i.MX6、 i.MX7 是 Arm32 ,所以对应的 ARCH 为 arm,i.MX8 是 Arm64,所以对应的 ARCH 为 arm64.

另外需要说明一点的是,大家可以看到 arm 和 mips 目录下 defconfig 文件非常多,而比较新的一些架构,比如arm64,risc-v 目录下,只有唯一的一个 defconfig 文件,这和 Linux Kernel 目前的开发风格转变有关:不再鼓励大家提交一堆乱七八糟的 defconfig 文件, 尽量只使用一个通用的 defconfig 文件,这里面尽量打开内核启动需要的模块,而对内核启动影响不大的模块,以模块的形式编译。在这个设计思想下,Arm32 下面有一个通用的 multiv7defconfig, Arm64 和 risc-v 对应的 defconfig 文件名都叫做 defconfig。所以如果现在你想为一个新的芯片提交它自己的 defconfig 文件到 mainline 分支,是不会被接受的,Linux 社区的 Maintainer 会告诉你,把你需要打开的特性加到通用的 defconfig 里面。

当然,我们在本地做开发的时候,一般不会这样玩,我们还是会根据自己的芯片和特定产品形态,创建独立的 defconfig 文件,这样方便深度裁剪。

这个配置文件是如何生成的呢?

我们一般在一个现有配置文件的基础上,根据产品需求,通过 make menuconfig 命令加减配置,然后再通过 make savedefconfig 命令生成新的配置文件:

比如我需要打开 drivers/gpu/drm/imx/dw_hdmi-imx.c 这个 HDMI 驱动,通过查看该 C 文件同目录下 Makefile,可以发现它依赖 DRM_IMX_HDMI 这个配置项:

make ARCH=arm menuconfig

对于对内核还不怎么熟悉的同学来说,如何找到 DRM_IMX_HDMI 这个配置的位置呢?别急,menuconfig 界面也是可以搜索关键字的:

按/键,就是?下面那个键,会弹出下面的界面:

然后在选择框里面输入要查找的关键字,敲Enter就会出现结果:

这里只有一个匹配的选项,所以我们直接在键盘上按1键,就会跳到对应的选项开关处:

然后打开对应的选项即可,<*> 号表示直接编译进内核, 表示以模块的方式编译,< > 则表示不编译。

按↑↓上下移动光标,按←→光标在最下面左右移动。

配置完成后选退出。这时候可以看到 DRM_IMX_HDMI 这个选项的配置已经生效了:

然后执行

make savedefconfig

命令,生成新的配置文件,并用该文件覆盖旧文件。

有人可能会疑问,为什么要用 make savedefconfig 来生成一个中间的 defconfig 文件呢,直接用 .config 去覆盖不是也可以吗?

答案是:make savedefconfig 命令生成的 defconfig 文件更精简,更易读。

1. 编译内核

这是最通用的编译内核的命令,第一个告诉内核要编译 arm 架构,第二个参数指定用什么交叉编译工具去编译。编译成功的结果大概是这样的:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

最终编译后的镜像是压缩过的 zImage。

同时所有的 dts 文件也会被编译成 dtb。

当然,如果为了编译的快,我们还可以启动并行编译,比如:

    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8

就是同时有 8 个编译进程在运行,并行数目设置多少最合适,这个一般取决于你用来编译的电脑有多少 CPU,以及内存够不够大,一般数据可以设置的和 CPU 个数相等,或者 2 倍。

有人会说,为什么我看到的有些开发板的编译说明文档和这个不太一样,比如下面这个:

这是因为,部分厂家的Kernel,为了满足自己的固件升级设计,做了一些特殊的打包和修改,你虽然看到的编译命令不一样了,其实他们都是基于最基本的编译命令做的封装定制。

它在 Makefile 里面指定了 ARCH 和 CROSS_COMPILE, 所以make 的时候就不需要指定这两个参数了。

然后通过这个修改,当开发者执行 make xxx.img 这种模式的命令的时候,会自动编译 zImage,并通过mkkrnlimg 这个命令对 zImage 打包生成 kernel.img。并且对通过 resource_tool 这个命令对 dtb 也进行了打包。

Linux Kbuid 系统还执行很多其他的 make 命令,可以通过 make help 来查看:

2. 编译 U-Boot

U-Boot 的编译步骤和 Linux Kernel 非常类似,也是两步:

    make  mx6ull_14x14_evk_defconfig

    make CROSS_COMPILE=arm-linux-gnueabihf-

唯一的差别是,U-Boot 在编译的时候不需要指定 ARCH 选项,这是 U-Boot 的编译系统相比 Linux Kbuid 的要给改进点。其实目前最新的 U-Boot 编译系统也是基于 Linux Kbuild 设计的,同样支持 make menuconfig 命令,有对应的 defconfig 文件,在 configs 目录下。

另外一个区别是,U-Boot 也有自己的 dtb,但是最终编译完的 U-Boot 会和 dtb 合并在一起。

3. 编译遇到错误怎么办

        我们在编译软件的时候,经常会遇到各种奇奇怪怪的报错,有些是软件本身有 Bug(对于 Linux Kernel、U-Boot 这类比较知名的开源项目,这种Bug 比较少见)、有些是因为编译环境里面缺少一些依赖工具(这种情况很常见)。对于刚接触的新人来说,一条 make 命令敲下去,发现蹦出来一堆莫名其妙的错误,是很令人沮丧的。

        但是不要怕,虽然你是新人,这也没关系,因为现在是互联网时代,对于那些广泛使用的开源项目,你踩到的坑基本都有很多人踩到过,而且这个世界有那么多乐于分享的人:他们遇到问题,勇敢的去分析,寻求解决方法,然后分享出来,他们是这个数字世界的热和光。

        所以,如果你遇到一个自己能看得懂搞得定的问题,那很简单,直接去搞定即可,然后如果你乐意,能再写一篇分享心得就更好了。如果你遇到了一个像天书一样,自己完全看不懂的报错,也不要紧,最实用的解决方案就是:直接把这个错误复制出来,粘贴到你的搜索引擎里,点下下一步,开始搜索即可,一条条耐心的去看,一般运气都不会太差。

        当然,搜索引擎的选择也是一门学问,如果你用到是百度,能搜到答案最好,如果搜不到,你还可以试试 Bing、Stackoverflow、Github、如果你能用 Google,那就更好了。

        相信我,这个方法能解决你所遇到的大部分问题。

<个人归纳:遇到错误提示 XXX not found的时候,在shell下面尝试用apt-get install(我用的Ubuntu)安装这个XXX,即:>

sudo apt-get install <xxx>

比如 我在执行 make ARCH=arm imx_v7_defconfig 就提示 failed 了:

仔细分析这个日志,我们会发现最开始有这样一个异常提示:/bin/sh:1:bison:notfound

一般在分析异常的时候,比较有效的方法是找到最开始报出异常的地方,先解决掉,然后再看是不是最终问题被解决掉了,其实大部分时候都是这样的,把最先冒头的问题解决掉,后面所有的问题都被打掉了。

如果你能看懂这个异常提示,其实你会发现它是说 shell 在执行 bison 这个命令的时候,发现这个命令找不到。

试试在命令行执行下 bison 这个命令,会发现如下提示:

然后按照提示 sudo apt install bison 安装即可解决。

如果你看不出来,也没关系,用前面提到的终极解决方案,直接把这条提示复制到百度里搜搜看:

运气比较好,太多人和我踩了同样的坑,前三条连接任意打开一个,点进去都能找到答案:

sudo apt install bison

安装完后再次执行 make ARCH=arm imx_v7_defconfig,bison 的报错没了,可是又蹦出来另外一个错误:

和前面一样,还是直接在百度中 复制——》粘贴——》搜索:(图我就不贴了)

 

踩坑的不止我一个啊,打开任意一个链接,就能找到解决办法:sudo apt install flex

然后再次执行 make ARCH=arm imx_v7_defconfig,终于成功了。

然后执行 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-开始编译, 发现又报错了:

直接用前面提到的三部曲(错误信息百度直接搜索法,图略):复制——》粘贴——》搜索:

 

打开这些链接,你会找到答案:sudo apt install libssl-dev

再次开始编译,好不容易编译到最后,又挑出来一个错误:

相信到这里你已经知道该怎么做了,没错,还是(错误信息百度直接搜索法,图略) 复制——》粘贴——搜索:并且你会很快找到解决问题的方法:sudo apt-get install lzop

继续编译,终于成功了:

更新完重启,可以看到最新的内核已经生效。

如果在编译 Linux Kernel 或者 U-Boot 的过程中遇到问题,可以参考这篇文章:Linux Kernel 和 U-Boot 编译的那些事。

详解岭回归与L2正则化 最小二乘法存在不可逆和病态问题,导致解析解不可计算或不稳定,岭回归是一种有效的解决方法,以损失无偏性来换取稳定解, 本文介绍详细介绍了岭回归的基本原理,并从L2正则化角度来进行了解释。 阅读详情

相关推荐

CTP Python API及Demo(利用Swig 封装)Windows版(6.6.1traderapi)

环境:visual studio2015、python3.9、 参考的是景色大神的教程自己制作,因为直接用它编译好的无法使用,遂自己编译。 从CTP官网上下载CTP API点击下载。这里用的版本是v6.6.1_P1_tradeapi,想使用不同的版本下载即可: 安装Swig软件,本文中所用的Swig是swigwin-4.0.2版本,点击下载。下载后解压,将swig路径添加到环境变量中。 安装python,注意要安装64位版本,将环境变量配置好。本文所用的是3.9版本。 通过Swig得到pyth.

ProgramVAE的博客 2542

编译内核时,make ARCH 与CROSS_COMPILE作用

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig

weixin_42963900的博客 5318

超详细YOLOv8姿态检测全程概述:环境、训练、验证与预测详解

本篇博客详细介绍了使用YOLOv8-pose进行姿态估计的全过程,包括不同版本模型的性能比较、训练与验证步骤,以及预测代码的实现。它对模型参数、训练过程和输出结果进行了解释,同时提供了详细的配置文件示例和标签数据格式说明。此外,还演示了如何使用预训练模型进行图像预测,并如何处理和理解预测结果。最后,它还讨论了如何评估和比较不同模型的性能。如果有哪里写的不够清晰,小伙伴本可以给评论或者留言,我这边会尽快的优化博文内容,另外如有需要,我这边可支持技术答疑与支持。

CDBmax的博客 3万+

make ARCH=arm  CR…

1、make ARCH=arm  CROSS_COMPILE=arm-none-linux-gnueabi- 注释  Linux下,用Make 命令来编译程序:   1)ARCH=arm 表示ARCH给出了目标处理器的架构这里用的是arm 处理器。      2)CROSS_COMPILE给出了编译程序所用的交叉工具链的名称,比如:CROSS_COMPILE=arm-none-linux-   

kylin_fire_zeng的专栏 2463

HFSS实战:手把手教你设计微带发夹线滤波器(附完整参数计算流程)

本文详细介绍了使用HFSS设计微带发夹线滤波器的完整流程,包括参数计算、HFSS建模和优化策略。通过实战案例,帮助读者掌握微波滤波器设计的核心技巧,特别是奇偶模阻抗计算和HFSS仿真中的关键设置,适用于通信系统设计和射频工程应用。

weixin_29251567的博客 440

ComfyUI Impact Pack实战:如何用三大检测器打造高效人脸修复工作流(附2025最新模板)

本文详细解析了如何利用ComfyUI Impact Pack中的BBOX、Segm和SAM三大检测器构建高效人脸修复工作流。通过技术选型、参数优化和实战案例,帮助用户掌握从精准定位到细节修复的全流程技巧,特别适用于商业摄影和影视制作场景。文章还提供了2025年最新模板和性能优化方案,显著提升人脸精修效率。

weixin_29040367的博客 243

配置树莓派linux的内核和编译并将镜像拷贝至树莓派

驱动代码的编写需要一个提前编译好的内核,编译内核就必须配置,配置的最终目标会生成.config文件,该文件指导makefile去把有用的东西组织成内核。 如何生成.config文件: 第一种方式: 厂家配linux内核源码,比如说买了树莓派,现在要研发树莓派的底层,厂家会提供树莓派linux内核源码,直接cp    厂家.config    .config 第二种方式: make menuconfig 一项项配置,通常是基于厂家的config来配置的。 第三种方式:

FHN优快云 1758

Telegram Bot Api使用教程

其中token为你的机器人token,method为telegram给定的方法,在获取群组chat_id那一步就使用了telegram的其中一个方法(getUpdates),其他方法后面会介绍。telegram发送消息的方式类似与钉钉机器人,都是向一个api发送http请求,而且对于同一个APItelegram支持GET和POST两种请求方式.请求的api格式如下。通常来说我们都需要让机器人在一个群组里工作,所以首先我们需要将机器人添加到我们指定的群组,在群组里发送随意消息并@这个机器人,比如...

豫迷糊的码上生活 1万+

嵌入式linux:make 参数 ARCH与CROSS_COMPILE

经常看到make 命令带一些参数,例如海思编译内核时使用命令 make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig 这时什么意思呢? ARCH 即architecture,就是选择编译哪一种cpu architecture,也就是编译arch/目录下的哪一个子目录。如指定make ARCH=arm就是编译arch/ar

2万+

工程制图习题集张大庆课后习题答案解析

所以,我想向大家求助,希望能得到一些学习资料、学习方法和学习经验,帮助我更好地理解和掌握这门课程。在寻找学习资料的过程中,我发现了一款叫做资小料的APP,它里面有很多关于工程制图的学习资料,包括视频教程、习题解答和考试真题等。通过使用资小料,我逐渐掌握了工程制图的基本理论和方法,解决了很多学习中遇到的问题。在这里,我想推荐给和我一样在学习《工程制图习题集》这门课的同学们,希望大家也能从这款APP中受益,共同进步。上传者: 『Consentesdei』蒼迷穀。出版社: 清华大学出版社。

weixin_58833001的博客 925

Zynq 【SDK裸机开发之PS】——DDR的内存分配使用详解

Zynq如果跑操作系统的话,内存管理的工作都会交给系统来操作,但是如果是裸机的话,则需要自己对DDR3的内存进行管理。

shizhibuyi1234的博客 7376

DM368 UBL和u-boot的裁剪

转载:http://blog.csdn.net/olei_oleitao/article/details/7919307   一、DM36X的BOOT过程介绍 DM36x的BOOT过程和DM6446、DM6467完全是一样的,因为都是ARM926EJS架构,里边都有一个RBL,这RBL在芯片出厂的时候都烧写在ROM里,芯片上电复位后RBL在运行,然后读取BOOT MODE引脚的电平状态,决定

zhanjianshinian的专栏 1873

Dify 第 4 篇 Dify 示例:数据库执行Agent

本文介绍了如何在Dify平台创建一个能够执行SQL查询的数据库Agent。通过安装并配置"通义千问"和"数据库"两个插件,实现自然语言到SQL语句的转换和执行。关键步骤包括:1)安装插件并配置API Key;2)设置默认数据库连接(建议使用只读账号);3)准备测试数据表结构。该Agent支持通过工具调用查询表结构、转换自然语言为SQL、执行查询并返回结果,同时提供了CSV查询和HTTP API接口功能。文中还提供了MySQL测试数据表的创建脚本和示例数据。

甘蓝的专栏 1156

uboot命令行从U盘升级kernel

背景 嵌入式Android的kernel升级方式有很多,可以从OTG口、SD卡、U盘升级,常用的是OTG口,几乎每个设备都有。SD卡现在很多都不怎么用了,连手机上也已经取消。 最近在项目中就遇到了一个尴尬的情况,刚做出来的板子OTG口用不了,不能升级和刷机,也没有SD卡,只有一个USB2.0口,通过串口只能看到启动到了u-boot,kernel中的串口被关闭了,并且kernel起不来。所以就想能不...

wolfnx 2498

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

如何编译Linux Kernel

很多人都问到如何编译Linux kernel,所以把一些点总结一下。参考kernel源代码目录下的README文件,基本上是这么几步:1. make mrproper -- 注意这一步走过之后,.config会被恢复成默认设置2. make menuconfig -- 在这里面check配置项,决定哪个打开,哪个关闭。哪些driver编译成module,哪些直接编译进内核3. make ...

weixin_30745553的博客 500

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Compiling u-boot and Linux Kernel for Cyclone V SoC

转载: https://fpgawiki.intel.com/wiki/Compiling_u-boot_and_Linux_Kernel_for_Cyclone_V_SoC Contents  [hide]  1 Preparing SD Card 2 Building u-boot, Software Preloader &amp; Build tools ...

zjy900507的博客 638

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

从零开始搭建DM368开发环境,安装DVSDK4_02_00_06并编译生成uboot、rootfs和kernel镜像

目录〇、前言一、Ubuntu10.04的安装1.VMWare15的安装2.Ubuntu10.04的镜像获取3.Ubuntu10.04中需要做的修改更改apt-get源更新apt-get安装vim二、安装交叉编译工具链arm-none-linux-gnueabi-gcc工具链的下载工具链的安装三、安装DVSDK4_02_00_061.安装包的获取2.安装流程四、编译u-boot和Kernel1.编译...

Turix附属空间[已停用] 893

zynq跑linux桌面系统,ZYNQ跑系统 系列(二) petalinux方式移植linux

三、搭建petalinux工程0.定位目录先在shell中找一个准备存放工程的地方,(我的是home/hlf/PRO),命令行cd home/hlf/PRO1.定位编译链根据安装petalinux的路径:source /home/hlf/mnt/petalinux/settings.sh2.创建petalinux工程将在PRO目录下面,创建一个工程:petalinux-create --type ...

weixin_39878855的博客 1121

DAVINCI DM365-DM368开发攻略——U-BOOT-2010.12及UBL的移植

转载注明出处:http://zjbintsystem.blog.51cto.com/964211/713240 从盛夏走到深秋,我们继续DAVINCI DM365-DM368的开发。说来惭愧,人家51CTO热情支持本博客,而本人却一直没有像其他博客之星一样频繁更新博客,心里确实说不过去。管理公司确实很累,有更急的客户的项目要做,我们成功先推出了DM6446-810MHz的核心板( htt

huguohu2006的专栏 1706

编译内核提示mkimage command not found – U-Boot images will not be built

转載與:http://www.mr-wu.cn/u-boot-tools-binary-package-in-ubuntu/ ubuntu 14.04 64位系统编译linux kernel时提示: “mkimage” command not found – U-Boot images will not be built 按照以往经验,我们需要安装依赖包: sudo apt-get ins...

夜风的博客 751

zybo上运行linux,Zybo Board 开发记录: 执行 Linux 操作系统 - 全文

本文转载自:coldnew's blog在 zybo board 开发记录: Zynq 与 LED 闪烁控制 一文中我们谈到了如何透过 C 语言撰写独立的程序,让它控制 Zynq 的处理器系统 (Processing System, PS) 去闪烁 LED 的亮暗。既然 Zynq 的处理器系统 (Processing System, PS) 使用的是 ARM Cortex-A9 的处理器,那当然也...

weixin_28909441的博客 498

编译Stlinux, u-boot(记录问题)

>>> Linux Kernel <<< 发现错误 cc1: error: unrecognized command line option "-ml" make带上V=1发现 gcc -Wp,-MD,kernel/.bounds.s.d -nostdinc -isystem /usr/lib/i386-linux-g...

weixin_33738555的博客 132

嵌入式Linux移植四大步骤(转载)

最近在学习系统移植的相关知识,在学习和调试过程中,发现了很多问题,也解决了很多问题,但总是对于我们的开发结果有一种莫名其妙的感觉,纠其原因,主要对于我们的开发环境没有一个深刻的认识,有时候几个简单的命令就可以完成非常复杂的功能,可是我们有没有想过,为什么会有这样的效果?如果没有去追问,只是机械地完成,并且看到实验效果,这样做其实并没有真正的掌握系统移植的本质。 在做每一个步骤的时候,首先问问自己,...

oooooooooooooookjk的博客 414

完整精确导入Kernel与Uboot参与编译了的代码到Source Insight,Understand, SlickEdit

版权声明:转载请注明出处: http://blog.csdn.net/sy373466062 作者: TonyHo https://blog.csdn.net/sy373466062/article/details/49071917 功能描述: 写了一个脚本,完整精确导入Linux Kernel...

Qinus的博客 769

Linux内核启动卡在Uncompressing Linux... done, booting the kernel[转载]

Uboot输出,无内核信息输出 ## Booting kernel from Legacy Image at 32000000 ... Image Name: Linux-2.6.13-utulinux2440 Created: 2007-11-04 7:12:20 UTC Image Type: ARM Linux Kernel Image (gzip compr

我的博客 3901

U-Boot 常见启动故障排查与优化方案

文章摘要 本文针对U-Boot启动过程中的常见故障提供了系统排查指南。作者将启动问题分为四类症状:串口完全无输出(最严重)、SPL卡住、U-Boot可启动但内核加载失败、内核启动后panic。针对每类问题,文章给出了详细的排查步骤和解决方案,包括检查供电/串口连接、确认启动介质、DDR初始化问题定位、文件系统挂载失败处理等关键环节。同时提供了环境变量恢复方法和启动性能优化技巧,如减少bootdelay、关闭不必要功能、使用Falcon Mode等。本文是嵌入式开发人员解决U-Boot启动问题的实用参考手册。

爱片闲串,爱钓鱼,爱中医,爱分享 224
上一篇: 如何设置pip安装的国内源
下一篇: 【转载】一次搞定 Arm Linux 交叉编译
LateLinux
博客等级 码龄18年 65粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值