【014】编译linux内核报错 [ 'mkimage' command not found ]
riscv linux内核编译过程

riscv linux内核编译过程全文共四篇示例,供读者参考第一篇示例:RISC-V(Reduced Instruction Set Computing-V)是一种基于精简指令集(RISC)的开源指令集架构,旨在提供更灵活、更适用于现代计算需求的处理器设计。
在RISC-V架构中,Linux内核是最受欢迎的操作系统之一,为RISC-V平台提供强大的支持和功能。
本文将介绍RISC-V Linux内核的编译过程,帮助您了解如何在RISC-V架构下编译和定制Linux内核。
一、准备编译环境无论您是在本地计算机还是远程服务器上编译RISC-V Linux内核,首先需要安装必要的工具和软件包。
一般来说,您需要安装以下软件:1. GCC:GNU Compiler Collection是一个功能强大的编译器套件,用于编译C、C++和其他编程语言的程序。
在RISC-V架构下编译Linux内核时,可以使用最新版本的GCC版本。
2. Make:Make是一个构建自动化工具,可以大大简化编译和安装过程。
在编译Linux内核时,Make是必不可少的工具。
3. Git:Git是一个版本控制系统,可以帮助您获取和管理源代码。
在编译RISC-V Linux内核时,您需要从GitHub上克隆Linux内核源代码。
4. 软件包:除了以上基本软件外,您还可能需要安装其他依赖软件包,如Flex、Bison等。
二、获取Linux内核源代码```git clone https:///torvalds/linux.git```通过上述命令,您将在当前目录下创建一个名为“linux”的文件夹,其中包含了Linux内核的源代码。
您可以根据需要切换到不同的分支,如稳定的分支或特定版本的分支。
三、配置内核选项在编译RISC-V Linux内核之前,您需要配置内核选项以适应特定的硬件平台或应用需求。
您可以通过以下命令进入内核配置菜单:```make menuconfig```通过上述命令,将打开一个文本界面,您可以在其中选择不同的内核配置选项。
kernel5.10 编译方法 -回复

kernel5.10 编译方法-回复标题:编译Linux Kernel 5.10的详细步骤在Linux的世界中,编译Kernel是一项基础且重要的技能。
本文将详细介绍如何从源代码编译Linux Kernel 5.10。
以下是一步一步的详细教程。
一、准备工作1. 确保系统环境首先,你需要一个运行中的Linux系统。
本文以Ubuntu 20.04为例,但大部分Linux发行版的步骤应该是类似的。
2. 更新系统确保你的系统已经更新到最新版本,可以使用以下命令:sudo apt-get updatesudo apt-get upgrade3. 安装必要的工具编译Kernel需要一些基本的开发工具和库,可以通过以下命令安装:sudo apt-get install build-essential libncurses5-dev bc flex bison openssl libssl-dev dkms二、下载Kernel源代码1. 创建工作目录在你的主目录下创建一个名为kernel的工作目录:mkdir ~/kernelcd ~/kernel2. 下载Kernel源代码你可以从Kernel官网(5.10的源代码:wget3. 解压源代码使用以下命令解压下载的源代码:tar xvf linux-5.10.tar.xz这将在当前目录下创建一个名为linux-5.10的目录,这是Kernel的源代码目录。
三、配置和编译Kernel1. 进入源代码目录cd linux-5.102. 配置Kernel配置Kernel是编译过程中最重要的一步,你可以根据你的硬件和需求选择要编译的功能。
对于大多数用户,使用以下命令进行基本配置应该足够:make menuconfig这将打开一个基于文本的配置界面。
你可以使用方向键和回车键浏览和选择选项。
完成后,保存并退出。
3. 开始编译配置完成后,可以开始编译Kernel了。
这个过程可能需要一些时间,取决于你的计算机性能:make -j(nproc)这里的-j参数表示使用多少个进程进行编译,(nproc)会自动获取你的CPU 核心数。
LINUX内核模块编译步骤

LINUX内核模块编译步骤编译Linux内核模块主要包括以下步骤:1.获取源代码2.配置内核进入源代码目录并运行make menuconfig命令来配置内核。
该命令会打开一个文本菜单,其中包含许多内核选项。
在这里,你可以配置内核以适应特定的硬件要求和预期的功能。
你可以选择启用或禁用各种功能、设备驱动程序和文件系统等。
配置完成后,保存并退出。
3. 编译内核(make)运行make命令开始编译内核。
这将根据你在上一步中进行的配置生成相应的Makefile,然后开始编译内核。
编译的过程可能需要一些时间,请耐心等待。
4.安装模块编译完成后,运行make modules_install命令将编译好的模块安装到系统中。
这些模块被安装在/lib/modules/<kernel-version>/目录下。
5.安装内核运行make install命令来安装编译好的内核。
该命令会将内核映像文件(通常位于/arch/<architecture>/boot/目录下)复制到/boot目录,并更新系统引导加载程序(如GRUB)的配置文件。
6.更新GRUB配置文件运行update-grub命令来更新GRUB引导加载程序的配置文件。
这将确保新安装的内核在下次启动时可用。
7.重启系统安装完成后,通过重启系统来加载新的内核和模块。
在系统启动时,GRUB将显示一个菜单,你可以选择要启动的内核版本。
8.加载和卸载内核模块现在,你可以使用insmod命令来加载内核模块。
例如,运行insmod hello.ko命令来加载名为hello.ko的模块。
加载的模块位于/lib/modules/<kernel-version>/目录下。
如果你想卸载一个已加载的内核模块,可以使用rmmod命令。
例如,运行rmmod hello命令来卸载已加载的hello模块。
9.编写和编译模块代码要编写一个内核模块,你需要创建一个C文件,包含必要的模块代码。
Linux内核配置移植及编译实验

return platform_driver_register(&dm9k_driver); } 7.添加 YAFFS 文件系统支持 将我们提供的 YAFFS 的源代码 yaffs2.tar.gz 拷贝到 linux-2.6.24.4 的同 级目录下,解压该源码包,获得 YAFFS 源码: # pwd /root/2410-s # cp /mnt/hgfs/e/yaffs2.tar.gz ./ # tar zxvf yaffs2.tar.gz 然后进入 yaffs2 目录,运行./patch-ker.sh 给内核打上补丁: # cd yaffs2 # ./patch-ker.sh c ../linux-2.6.24.4/ 这样打好补丁以后,再做正确的配置,内核就可以支持 YAFFS 文件系统了。 8.配置和编译内核 到现在,一个简单的内核就准备好了,我们还需要做一些配置,然后编译, 内核才能正常使用。 在内核源代码的根目录下运行 make menuconfig 命令,进入配置界面: # make menuconfig (1)选择硬件系统 做如下选择: System Type --->
S3C2410 Machines ---> [*] SMDK2410/A9M2410 [ ] IPAQ H1940 [ ] Acer N30 [ ] Simtec Electronics BAST (EB2410ITX) [ ] NexVision OTOM Board [ ] AML M5900 Series [ ] Thorcom VR1000
.size = SZ_4M, }, [3] = {
.name = "User Space", .offset = 0x680000, .size = 0x1980000, }, }; 这样就把我们的 64M 的 NAND Flash 分为四个区: 第一个区从 0x00000000 到 0x00080000,大小为 0.5M 第二个区从 0x00080000 到 0x00280000,大小为 2M 第三个区从 0x00280000 到 0x00680000,大小为 4M 第四个区从 0x00680000 到 0x02000000,大小为 25.5M 5.添加 LCD 支持 我们的开发平台上配置有 640*480 的液晶屏,我们来为它加上驱动支持。 需要在 arch/arm/mach-s3c2410/mach-smdk2410.c 中添加一些内容。 # vi arch/arm/mach-s3c2410/mach-smdk2410.c 首先要包含我们的 LCD 使用的数据结构的头文件,增加如下内容: #include <asm-arm/arch-s3c2410/fb.h> #include <linux/platform_device.h> 然后添加如下内容: static struct s3c2410fb_display up2410_fb[] __initdata = { { .lcdcon5 = (1<<12)|(1<<11)|(1<<9)|(1<<8)|(1<<0), .type = (3<<5), .width = 640, .height = 480, .pixclock = 39721,
Linux内核编译及常见错误实验报告

***学生实验报告一、实验目的(1)学习重新编译Linux内核的方法(2)理解Linux标准内核和发行版本内核的区别。
二、实验内容在Linux系统中下载同一发行版本的版本号较高的内核,编译之后运行自己编译的内核,并使用uname-r命令查看是否运行成功。
由于不同版本的内核在编译过程中可能出现不同的问题,本书推荐的内核版本为4.16.10。
从第7章开始的进阶实验篇,都可以选用该版本的内核。
三、实验设备Vmware上运行的linux ubuntu 5.11.0-43-generic实验成功:linux ubuntu 4.18.0-generic(Ubuntu18.04均可)实验成功的方法在最后四、实验过程和原理分析一、实验(一)准备工作:在这里我建议用一个全新的虚拟机,避免编译错误对原来常使用的虚拟机造成不可逆的影响,安装好后就先安装gcc、make等工具首先下载好Linux***内核文件解压至/usr/src 目录下,如下:确认安装好gcc、make等工具,后可直接运行命令sudo make menuconfig进行查看内核功能是否需要编译,如果遇到如下错误可以运行命令sudo apt bison 或sudo apt-get install fiex bison命令解决错误:解决:(不建议)(强烈建议)除此之外还可以直接运行,上一条命令解决不了就用下面这个:sudo apt-get install --reinstall bison libbison-dev flex libfl-dev解决上述错误(强烈建议)运行完上述命令后再次输入sudo make menuconfig便正常进入如下:见到这个界面后无需任何多余操作,使用键盘方向键选择<Save>回车再回车即可此时.config文件生成成功.config文件是隐藏文件记得加参数-a此外还有一个方法就是用cp 命令从原有系统的内核复制.config文件过来也可以命令:sudo cp /boot/config- 5.11.0-43-generic ./.config(二)编译内核为了避免多线程编译时同时出现过多错误,我们这里一开始只使用单线程编译在这里除了用make编译还可以用make-kpkg等工具,个人比较喜欢用make-kpkg但课本用make所以我接下来的实验也先用make完成。
在ubuntu12.04下编译linux内核

在ubuntu12.04下编译linux内核写这个东西的时候,想起07年第一次编译内核,想起06年开始看内核代码,想起那段,生命中最灰暗的日子。
那时,经常在校内写读内核的心得,只因发现,你目录前言 (2)一、编译前的准备工作 (2)二、内核的配置 (2)三、内核的生成和安装 (3)四、启动新内核 (4)五、修改默认的配置文件 (4)5.1修改默认配置添加软件功能 (4)5.2修改默认配置添加pci和usb设备驱动 (5)5.3修改默认配置添加杂类设备驱动 (7)前言编译内核和编译其它软件相比,除了配置之外,没有什么特别的地方。
既然编译内核这么简单,网上也能找到很多介绍的文章,我为什么还要写呢?因为看到有些文章源自不断抄袭旧东西,导致抄了些没用的东西,而且基本都对内核配置避而不谈,这样实际上一定会有人遇到问题。
所以,写点吧,给初学者。
一、编译前的准备工作编译软件需要先安装编译环境,主要的就是工具链(toolchain)。
由于安装包需要下载的数据量较大,所以如果软件源建议还是换成国内的吧。
我用163的源,source.list文件在这里,覆盖/etc/apt/source.list就行了。
替换源后,执行如下命令:apt-get updateapt-get install build-essential p7zip-full后面的7z工具供下载了xz后缀文件的同学使用。
下载内核源码的网站是,版本随意,源码包名字是linux-3.x.x.tar.gz,有很多版本提供.xz结尾的压缩版本,压缩比较高,看自己网络情况定吧。
我这里下载的版本是3.6.6,名为linux-3.6.6.tar.gz。
接着解压源码,假设我们的编译目录为/home/sb/,解压命令为:tar xf linux-3.6.6.tar.gz-C/home/sb这样/home/sb/下出现一个linux-3.6.6的目录。
二、内核的配置内核支持很多的设备和功能,这些设备驱动和功能的开关主要通过内核的配置文件确定。
解决linux下编译make文件报错“binbash^M:坏的解释器:没有那个文件或目录”问题
解决linux下编译make⽂件报错“binbash^M:坏的解释器:没有
那个⽂件或⽬录”问题
PS背景:我在公司做sdk 的pc端开发,所以经常会在win下编译通过之后跑到linux下再运⾏⼀次已确保能⽀持多平台。
今⼉在win下跑完⼀程序,然后放到linux下跑的时候,我⽤指令:
sudo ./build.sh
但是却没有任何反应。
于是我换了指令,⽤
chmod u+x build.sh
./build.sh
报错 “build.sh /bin/bash^M: 坏的解释器:没有那个⽂件或⽬录”。
以前遇到这个问题,换了⼏种编译⽅法就解决了,单这次还是不⾏,于是⼜换:
bash build.sh
编译的时候报错:
后来⼀想 \r 这个符号怎么出现的,于是各种百度,才知道原因可能是因为我在win下操作的时候,修改到了此⽂件。
在win下编辑的时候,换⾏结尾是\n\r ,⽽在linux下是\n,所以才会有多出来的\r
⽤指令:
sed -i 's/\r$//' build.sh
会把 build.sh 中的\r 替换成空⽩!
再次编译!成功!!
PS:写在后⾯
⼀楼⼤⽜提议,有⼀个dos2unix的软件,我⼀看果然好⽤!感谢CedarDiao ⼤⽜!。
解决引导内核遇到undefinedinstruction的错误
解决引导内核遇到undefinedinstruction的错误其实在上⼀篇随笔之前,就是在启动linux 内核的时候,出了点问题刚Starting kernel ...就出现了undefined instrction,这是什么问题呢?在⽹上也搜了不少资料,有两篇很有启发就是这两篇。
我们先来了解下mkimage这个命令,重要关注loadaddress和entry address./mkimage -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image-A ==> set architecture to 'arch'-O ==> set operating system to 'os'-T ==> set image type to 'type'-C ==> set compression type 'comp'-a ==> set load address to 'addr' (hex)-e ==> set entry point to 'ep' (hex)-n ==> set image name to 'name'-d ==> use image data from 'datafile'-x ==> set XIP (execute in place)mkimage是将zImage之前加上64字节的镜像头所以如果使⽤mkimage⽣成内核镜像⽂件的话,会在内核的前头加上了64byte的信息,供建⽴tag之⽤。
bootm命令会⾸先判断bootm xxxx 这个指定的地址xxxx是否与-a指定的加载地址是否相同。
linux系统下uboot、kernel、android文件系统编译错误整理及解决办法
linux系统下uboot、kernel、android文件系统编译错误整理及解决办法Ver1.0作成者:雷鹏作成年月:2012/09/251、linux下编译应用程序时出现如下错误: /usr/bin/ld: cannot find -lxxx。
原因分析:编译过程找不到对应库文件。
其中,-lxxx表示链接库文件 libxxx.so。
由于库文件是编译过程临时生成的,如果前面编译过程出错也会导致出现这种情况,下面针对本机系统环境缺失而引起的错误进行分析。
一般出现这种错误有以下几种原因:⑴.系统缺乏对应的库文件;⑵.版本不对应;⑶.库文件的链接错误;⑷.库文件路径设置问题。
解决方法:对应第一第二种情况,可以通过下载安装lib来解决,ubuntu系统可以直接通过apt-get来安装:apt-get install libxxx-dev如果还是不能解决问题,那么,引起错误的原因不是链接错误就是库文件路径问题。
通过find或者locate指令定位到链接文件,查看链接文件是否正确的指向了编译需要的lib,如果不是,用下列指令修改它。
ln -sf */libxxx.so.x */libxxx.so如果是库文件路径引发的问题,可以到/etc/ld.so.conf.d目录下,修改其中任意一份conf文件,(可以自建conf,以方便识别)将lib所在目录写进去,然后在终端输入 ldconfig 更新缓存。
2、编译时出现错误提示:include/asm is a directory but a symlink was expected原因分析:linux/include/asm 文件夹是内核编译过程中创建的,创建结果就是一个指向文件夹asm-arm 的链接,表明该系统的平台是arm架构的,而编译系统内核之前,是没有asm这个链接的,所以,在编译过程中,创建该链接时文件名字与asm文件夹的名字发生冲突,于是系统报错了。
1.编译内核模块遇到的问题
1.编译内核模块遇到的问题问题:使⽤内核包编译驱动时常常提⽰如下:WARNING: Symbol version dump /usr/src/linux-2.6.26/Module.symversis missing; modules will have no dependencies and modversions.原因:通常头核⼼包中是没有Module.symvers这个⽂件的,要想获取这个⽂件只能到下载相同版本核⼼(2.6.26-1-686)的头⽂件,是下载不是apt-get install ,只有下载的头⽂件中才有这个Module.symvers。
把Module.symvers 复制到核⼼包中,然后执⾏如下步骤:make oldconfig && make prepare && make scripts。
然后重新编译驱动,将解决这个warning,同时也解决了版本不正确的问题我不知道有多少⼈会碰上这样的问题,反正google中我发现没有⼈能说明⽩这个问题ps:我遇到的问题是则是运⾏:make -C /usr/src/linux-2.6.34-12 SUBDIRS=$PWD modules出错如下:make: Entering directory `/usr/src/linux-2.6.34-12'ERROR: Kernel configuration is invalid.include/generated/autoconf.h or include/config/auto.conf are missing.Run 'make oldconfig && make prepare' on kernel src to fix it.WARNING: Symbol version dump /usr/src/linux-2.6.34-12/Module.symversis missing; modules will have no dependencies and modversions.scripts/Makefile.build:44: /usr/src/linux-2.6.34-12/PWD/Makefile: No such file or directorymake[1]: *** No rule to make target `/usr/src/linux-2.6.34-12/PWD/Makefile'. Stop.make: *** [_module_PWD] Error 2make: Leaving directory `/usr/src/linux-2.6.34-12'运⾏:make oldconfig && make prepare再次出错如下:make: Entering directory `/usr/src/linux-2.6.34-12'WARNING: Symbol version dump /usr/src/linux-2.6.34-12/Module.symversis missing; modules will have no dependencies and modversions.CC [M] /home/xxx/test/dr/drhello.oBuilding modules, stage 2.MODPOST 1 modules/bin/sh: scripts/mod/modpost: No such file or directorymake[1]: *** [__modpost] Error 127make: *** [modules] Error 2make: Leaving directory `/usr/src/linux-2.6.34-12'加上:make scripts可以了make: Entering directory `/usr/src/linux-2.6.34-12'WARNING: Symbol version dump /usr/src/linux-2.6.34-12/Module.symversis missing; modules will have no dependencies and modversions.CC [M] /home/xxx/test/dr/drhello.oBuilding modules, stage 2.MODPOST 1 modulesCC /home/test/dr/drhello.mod.oLD [M] /home/test/dr/drhello.komake: Leaving directory `/usr/src/linux-2.6.34-12'。