Linux内核选配编译步骤

Linux内核模块 步骤如下:(将内核软连接到家目录下:ln -s /home/linux/kernel/linux-5.10.61-new/linux-5.10.61 ~/linux-5.10.61)⑧进入~/kernerl/linux-stm32mp-5.10.10-r0/linux-5.10.10/drivers/char。⑪回到~/kernerl/linux-stm32mp-5.10.10-r0/linux-5.10.10/drivers/char。①进入~/linux-5.10.10/drivers/char。 阅读详情

简介:本文主要介绍了Linux内核的选配编译过程,并加入dm9000网卡驱动,通过nfs挂载根文件系统。由于本人为初学者,这是我的一篇学习笔记,有错误或不足之处还望您提出宝贵的建议。


平台介绍:

CPU:SAMSUNG Exynos-4412

开发板:iTop系列。

Linux内核版本:linux3.19.1

交叉编译器版本:arm-linux-gcc-4.6.4

宿主系统:REHL6.0


1、选平台,指定交叉编译工具链:

(1)、在Makefile中指定:

源码顶层目录下Makefile

ARCH                ?=$(SUBARCH)

CROSS_COMPILE        ?=$(CONFIG_CROSS_COMPILE:"%"=%)

改为:

ARCH                ?=arm

CROSS_COMPILE        ?=arm-linux-

(2)、编译时指定:

# make ARCH=armCROSS_COMPILE=/opt/arm-linux-gcc-4.6.4/bin/arm-linux-

 


 

2、导出缺省配置:

(1)、直接把缺省配置文件改成 ”.config“:

把“源码/arch/arm/configs”目录下的“xxxx_defconfig“(例如:”exynos_defconfig“)配置文件拷贝到源码顶层目录下,并改名为”.config“。

(2)、使用make生成缺省配置:

# make exynos_defconfig

#执行该命令后系统会在源码顶层目录下自动生成 ”.config“文件:

#configuration written to .config



 

3、往设备树文件中添加dm9000网卡驱动:

(1)、参考与自己板子最接近的demo板的设备树文件生成自己的设备树文件(直接拷贝修改)。

设备树文件在”源码目录/arch/arm/boot/dts/exynos4412-fs4412.dts“


(2)、在设备树文件中添加网卡设备驱动信息(参考网卡厂商提供的范例代码):


示例代码在”Documentation/devicetree/bindings/net/davicom-dm9000.txt “,如下:

Davicom DM9000 Fast Ethernet controller

 

Required properties:

- compatible = "davicom,dm9000";

- reg : physical addresses and sizes of registers,must contain 2 entries:

    first entry: address register,

    secondentry : data register.

- interrupt-parent : interrupt controller to whichthe device is connected

- interrupts : interrupt specifier specific tointerrupt controller

 

Optional properties:

- davicom,no-eeprom : Configuration EEPROM is notavailable

- davicom,ext-phy : Use external PHY

 

Example:

 

       ethernet@18000000 {

               compatible = "davicom,dm9000";

               reg = <0x18000000 0x2 0x18000004 0x2>;

               interrupt-parent = <&gpn>;

               interrupts = <7 4>;

               local-mac-address = [00 00 de ad be ef];

               davicom,no-eeprom;

        };

修改并添加:


ethernet@05000000 {

                compatible ="davicom,dm9000";

                reg = <0x050000000x2 0x05000004 0x2>;/*0x05000000为4412处理器的srom片选地址,详见手册*/

                interrupt-parent = <&gpx0>;/*继承父节点*/

                interrupts = <6 4>;/*gpx0节点中断中的第6个,4是标志*/

                local-mac-address = [00 00 dead be ef];/*网卡地址*/

                davicom,no-eeprom;

 

pinctrl@11000000 {

...

gpx0: gpx0 {

gpio-controller;

#gpio-cells = <2>;

 

interrupt-controller;

interrupt-parent =<&gic>;

interrupts = <0 160>, <0 17 0>, <0 18 0>, <0 19 0>,/*中断<类型 中断号 中断标志>*/

     <0 20 0>, <0 21 0>, <0 220>, <0 23 0>;

#interrupt-cells = <2>;

};

...

}

 

4、修改设备树的Makefile文件:

设备树的Makefile文件在”xxx/linux-3.19.1/arch/arm/boot/dts“目录下。


(1)、直接添加:


(2)、为了加快编译速度,删除其他多余的设备树文件,仅保留自己的设备树文件:


 

5、内核选配:

(1)、执行make menuconfig命令通过图形界面方式选配(在源码顶层目录下执行):

(2)、添加网络协议支持:

(3)、添加dm9000网卡设备驱动:

(4)、添加nfs文件系统支持

 

6、保存配置,编译内核:

在源码顶层目录下执行”make“命令编译内核:

 

7,制作内核镜像:

gcc--编译内核-->vmlinux(elf头)--去elf头--->Image--压缩-->zImage----加u-boot特定格式头---->uImage

u-boot源码的tools会编译出一个x86下运行的应用程序”mkimage“打包uImage

 

把arch/arm/boot/zImage文件拷贝到源码根目录下,然后执行如下命令(要先把uboot生成的mkimage工具拷贝到源码根目录下):

./mkimage -A arm -O linux -T kernel -C none-a 0x41000000 -e 0x41000040 -n 'linux-3.19.1@wnavy' -dzImage uImage

 

 

8、tftp下载内核镜像并通过nfs挂载根文件系统:

把编译好的内核景象uImage和设备树exnos4412-fs4412.dtb拷贝到tftp目录下,打开开发版电源启动内核并挂载文件系统。

 

简介:本文主要介绍了Linux内核的选配编译过程,并加入dm9000网卡驱动,通过nfs挂载根文件系统。由于本人为初学者,本文是我的一篇学习笔记,有错误或不足之处还望见谅。
图解Linux内核裁剪:步骤详解与实践 Linux内核是操作系统的核心部分,负责管理硬件资源,提供系统服务,是用户空间和硬件之间的接口。它是一个开源项目,由世界各地的开发者共同维护,确保了系统的灵活性和可靠性。 阅读详情

相关推荐

保姆级教程:用Smaart7和你的USB声卡搞定现场音响系统调试(附频谱与延时测试避坑指南)

本文提供Smaart7与USB声卡协同工作的现场音响系统调试指南,涵盖硬件连接、频谱分析、延时校准等关键步骤。通过详细的操作流程和常见问题解决方案,帮助音响工程师快速掌握专业测量技术,确保演出音质达到最佳状态。

weixin_29290259的博客 424

linux 内核如何读取你配置好的.config文件

众所周知,linux kernel可以根据使用者的需要灵活的配置架构、功能和模块。甚至在文件内部的同一个接口也会根据配置不同条件编译不同的实现,这些都是通过读取在内核的顶层目录通过make menuconfig后生成的.config文件实现的。那么这个读取的过程是怎么实现的呢?

weixin_45465612的博客 811

从Gitee上部署视觉工程到Linux虚拟机

(使用SVM来识别装甲板的编号,此处手机上的图片中只有灯条没有数字,SVM无法识别出编号。这两行代码的意义是,当SVM识别不出或者识别不到编号时,把装甲板的编号默认为2号。找到自瞄程序中,数字识别类下的这两行代码,把注释去掉。这样,每次打开新的终端时,环境变量都会自动设置。(2)查看虚拟机设置选项,检查虚拟机USB接口是否为3.0及以上的接口。如果不是,要更改好。这样,每次打开新的终端时,环境变量都会自动设置。后,每次打开终端时自动设置这些环境变量,你可以将。打开第一个终端,用来挂ROS的内核启动页面。

2301_81035291的博客 1520

linux开源库的编译方法

1、运行configure生成Makefile (1)–help 输出帮助信息.即使是有经验的用户也偶尔需要使用使用’–help’选项,因为一个复杂的项目会包含附加的选项。例如:GCC包里的’configure’脚本就包含了允许你控制是否生成和在GCC中使用GNU汇编器的选项。 (2)–prefix=preFIX(文件安装的位置) ‘–prefix’是最常用的选项。制作出的’Makefile’会查...

it_worker_555的博客 958

CAPL与人工智能结合

AI模型是指通过机器学习算法训练得到的模型,可以用于分类、回归、聚类等任务。常见的AI模型包括神经网络、支持向量机、决策树等。在汽车电子系统中,AI模型可以用于故障诊断、驾驶行为分析、自动驾驶等场景。实时决策是指在汽车电子系统中,根据AI模型的预测结果,实时做出决策。实时决策可以用于自动驾驶、故障诊断等场景。通过本文的学习,读者应该对CAPL与人工智能结合有了初步的了解,并能够编写复杂的CAPL脚本。

闲人编程的博客 1481

从零搭建 C# + YOLO 工业视觉系统:从模型训练到上位机部署(工业级落地)

做工业质检、自动化生产线的同学都懂:一套能用的工业视觉系统,既要“检测准”,又要“界面易操作”,还要“部署稳”。之前帮某电子厂做PCB缺陷检测,一开始用Python+YOLO做检测核心,QT做上位机,结果踩了无数坑:Python推理速度波动大,QT和Python跨语言集成繁琐,数据传递容易卡顿;后来换成C# + YOLO的组合,直接打通了“模型训练-上位机开发-工业部署”全流程——C#的WinForms/WPF开发上位机高效,工业相机SDK支持完善;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 737

linux内核编译指定工具连

make modules CROSS_COMPILE=arm-linux-

weixin_34290000的博客 225

华为OD机考双机位C卷 - 构成正方形的数量 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 成正方形的数量 (OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 5938

CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)含义解析

CROSS_COMPILE    ?= $(CONFIG_CROSS_COMPILE:"%"=%)中"%"=%为模式解析的一种,即 “” 双引号中含义 由于linux/init/Kconfig文件中交叉编译器前缀配置string,在使用make menuconfig 配置字符串为个人配置,我在操作时候配置为arm-linux- 所以再生成的.config中可以找到CONFIG_CROSS_CO...

fy198796的博客 4816

bevformer详解(3): 逐行代码讲解

在这篇文章中,我们将从BEVFormer算法代码入手,深入探究BEV转换的流程。BEVFormer是一种基于Transformer的BEV转换模型,其核心思想是利用自注意力机制和交叉注意力机制,从,并通过Object Query与BEV特征的交互,完成3D目标检测和地图分割等任务。https://developer.baidu.com/article/details/3224715bevformer的网络结构由三部分组成, 模型结构所示,其中的是部分,对于的是的结构,对于部分,沿用的中的decoder部分,

@bangbang的博客 3701

基于非接触式微波雷达设计的跌倒检测预警系统【短信报警】

本项目选择基于非接触式微波雷达的跌倒检测预警装置作为技术核心,采用云帆瑞达的R60AFD1跌倒检测模组。这一模组能够根据人体的运动变化,如速度、距离和姿态等特征,判断是否发生跌倒,并可以持续监控老年人是否处于危险状态。此外,本项目还结合4G通信技术,通过Air724UG模块实现短信报警功能,一旦检测到跌倒事故,系统将自动通过4G网络向紧急联系人发送短信报警,及时通知亲属或医护人员进行救援。

1755

linux设备树的解释

转载地址:https://blog.youkuaiyun.com/cc289123557/article/details/51781771本文系列文章建议参考文章Documentation/devicetree/booting-without-of.txtlinux设备树的解释 - 总览 文章从全局介绍了dt使用的整个流程,言简意赅linux设备树的解释 - DTC编译器 文章介绍了dtc编译器及DT文件组织...

kunkliu的博客 1845

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

linux内核移植简述

以s5pv210为例简要说明。 1、选平台 A、修改顶层Makefile ARCH ?= arm CROSS_COMPILE ?= arm-linux- 就是在指定arch\arm目录需要交叉编译编译,其他体系平台下的目录则不会。 B、拷贝arch\arm\configs\s5pv210_defconfig到顶层目录下 打开终端,进到内核顶层目录,并执行: # make s5p

830

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

深度学习工具包 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")

【转】 linux内核移植和驱动添加(三)

原文网址:http://blog.chinaunix.net/uid-29589379-id-4708909.html 原文地址:linux内核移植和驱动添加(三)作者:genehang 四,LED驱动的添加 1,将led.c驱动文件拷贝到linux-3.1.4/drivers/char/目录下 root@char#pwd /change/linux-3....

weixin_30886233的博客 122

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

让你快速高效的掌握linux内核编译过程

每一级目录中都包含一个Kconfig文件,用于生成选配菜单的。# 195 $(obj)/piggy.$(suffix_y).o: $(obj)/piggy.$(suffix_y) FORCE -> piggy.gzip.o:piggy.gzip -> piggy.gzip.o依赖piggy.gzip。# -> $(obj)/piggy.$(suffix_y).o = arch/arm/boot/compressed/piggy.gzip.o 由 piggy.gzip.S(编译中间生成)生成。

m0_70888041的博客 729

内核移植步骤

内核移植步骤 相比于uboot移植,内核只关心内存条的情况,所以移植相对uboot简单 **第一步:**网上下载相关的内核文件http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/ **第二步:**配置内核移植的必要环境 (1)需要支持menuconfig(有了这个方便我们后面选择配置) 只需要dpkg -i 压缩包就可以 (2)需要支持mkimage(编译image文件时需要) 将mkimage工具拷贝到/usr/bin **第三步:**选择

qq_43814197的博客 1367

快速编译linux,让你快速高效的掌握linux内核编译过程

Linux内核编译一、linux内核的配置与编译:1.配置内核1)导入默认配置:make xxxx_defconfig注1:xxxx表示内核支持的芯片的名称 比如make exynos_defconfig注2:内核源码中对每个支持的芯片都有默认的配置,默认配置很少只能保证系统完成最基本的功能注3:可以通过直接修改.config文件来进行内核的配置(麻烦),所有内核配置的本质都是修改.config文...

weixin_29187895的博客 332

linux 内核 网卡驱动 移植,linux内核移植步骤添加dm9000网卡驱动(设备树).docx

linux内核移植步骤添加dm9000网卡驱动(设备树).docx LINUX内核移植步骤2015年05月13日星期三上午1105往设备树中添加网卡驱动1、选平台,指定交叉编译工具链1、在MAKEFILE中指定源码顶层目录下MAKEFILEARCHSUBARCHCROSS_COMPILECONFIG_CROSS_COMPILE““改为ARCHARMCROSS_COMPILEARMLINUX2、编译...

weixin_30831529的博客 448

内核编译选配(VMware篇)

出现这个错误的原因是相应的驱动程序没有编译进内核,所以在内核启动时,不认识分区。 一、磁盘驱动没编译进内核 VMware5.5.3 的磁盘有两种,一种是IDE的,一种是SCSI的;VMware 你在新建 linux 虚拟机时默认的是SCSI 。 在5.5.3的版本中使用的是SCSI类型设备中的LSI Logic设备(据网上资料,4.0以前的版本用的是BusLogic设备)。...

weixin_30949361的博客 338

Linux内核移植 | 内核移植

home/linux/soft/ 是工具链的路径,添加到PATH的头部;写入/etc/bash.bashrc 中保证重启机器后变量仍然有效。通过串口配置U-Boot的启动参数,让U-Boot通过tftp服务获取uImage和 exynos4412-origen.dtb。ps:如果提示缺少库,使用apt-get install下载即可。至此没有异常的话可以正常启动 linux, 但是挂载不了根文件系统,因为没有配置网卡驱动。首先将在Ubuntu环境中,添加交叉编译工具到PATH变量,永久有效。

本末实验室 1721

【嵌入式Linux】源码菜单配置 | 编译 | 菜单配置的实现 | 源码编译的实现

【嵌入式Linux】源码菜单配置 | 编译 | 菜单配置的实现 | 源码编译的实现

Hi 3024

Linux内核移植

linux内核移植

weixin_44254079的博客 827

【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第三十八章 驱动模块编译进内核

本章节我们来学习如何把驱动编译进内核,第38.1章已经学习了make menuconfig的图形化配置,那么有关menuconfig的几个配置文件之间的关系已经讲清楚了,本章节我们来讲解把36.3章节的helloworld驱动编译到内核,之前37.1章节是编译helloworld为模块,然后insmod加载进去模块。一般来说,其帮助信息,都包含针对该选项的很详细的解释。该宏,就是写出到配置文件中的那个宏,对于写makefile的人来说,往往也是利用此相关的宏,在makefile中,实现对应的不同的控制。

BeiJingXunWei的博客 1238

Linux_内核模块化编程

1.加载驱动的情况 1.1.静态编译到内核 1)执行make menuconfig,找到 Device Drivers —> Character devices —> 将菜单前面的括号选择为 ’*’ ,然后保存退出。 2)分析linux-3.5/drivers/char/目录下的Makefile,寻找和tiny4412_hello_module.c有关的地方 3)CONFIG_TINY4412_HELLO_MODULE为一个宏,是在linux-3.5/.config内定义的 4)从这可以看出,

idontnoaaaa的博客 472
上一篇: Linux网络编程学习之---简单局域网FTP文件传输服务器
胡椒小兄弟
博客等级 码龄16年 6粉丝 2原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值