瑞芯微Rockchip开发者社区
登录
直播中
YYXIAO
9年用户
1172经验值
擅长:接口/总线/驱动
私信
关注
[问答]
怎样去编译Linux内核呢
开启该帖子的消息推送
RK3288
Linux
内核
怎样去编译Linux内核呢?有哪些编译步骤?
回帖
(1)
罗颖
2022-3-3 14:37:18
一、编译内核
1、准备工作
(1)安装开发包
sudo apt-get install build-essential lzop libncurses5-dev libssl-dev
sudo apt-get install libc6:i386
(2)安装 mkbootimg 工具
git clone
cd rockchip-mkbootimg
make && sudo make install
(3)获取内核源码和安装交叉编译工具链
如果没有下载 SDK,则需要下载内核源码及 Android 的 arm-eabi-4.6 交叉编译工具链。
下载内核源码:
git clone
内核下载之后的内容如下所示:
下载交叉编译工具链,内核编译用到arm-eabi-4.6交叉编译工具链,
下载完成之后创建toolchain目录,并将交叉编译工具链拷贝到此目录下
解压文件
sudo tar -xzvf arm-eabi-4.6.tar.gz
2、编译内核
(1)编译内核映像
进入内核目录,设置ARCH环境变量,告诉编译器目标平台的架构; 设置交叉编译器。这两步需要一次执行,不然会报错
exportARCH=arm
export CROSS_COMPILE=./../toolchain/arm-eabi-4.6/bin/arm-eabi
在内核源码目录里执行:
载入Firefly RK3288开发板内核配置:
make firefly-rk3288-linux_defconfig
编译
make -j8 firefly-rk3288.img
出现错误:
进入Makefile,修改以下内容:
从中可以看出编译器的路径不正确,修改编译器的路径
修改之后的路径:
重新编译之后,编译成功。
(2)编译内核模块
在内核源码目录里执行:
make modules
mkdir modules_insatll
make INSTALL_MOD_PATH=./modules_install modules_install
内核模块是需要拷到根文件系统中即可:
3、创建 boot.img
(1)创建内存盘
内核启动时会加载内存盘作为初始的根文件系统,再加载实际的根存储设备,最后切换过去。因为开发板使用的是 eMMC 存储,不需要特别的驱动,因此实际上可以跳过此步。但内存盘可以做得非常灵活和强大,例如可以做多系统启动。
git clone
make -C initrd
initrd中包含了实现这个目标所需要的目录和可执行程序的最小集合,例如将内核模块加载到内核中所使用的 insmod工具。
在桌面或服务器Linux系统中,initrd是一个临时的文件系统。其生存周期很短,只会用作到真实文件系统的一个桥梁。
(2)打包内核和内存盘
将 kernel 和 initrd 打包成 boot.img:
Firefly官方发布的Ubuntu系统都是只有boot分区的,所以要将 kernel 和 initrd 打包成 boot.img,生成boot镜像用到了一个新工具mkbootimg,给mkbootimg增加可执行属性:
sudo mkbootimg --kernel arch/arm/boot/zImage --ramdisk ../initrd.img -o boot.img
产生的boot.img如下所示:
4、修改 parameter 文件
Linux 的根文件系统(RFS)可能在不同的分区或存储设备上(eMMC、TF 卡或 U 盘),所以需要在内核的参数中指定。修改 parameter 文件中的 CMDLINE 行:
5、烧写到设备
选择生成的 boot.img 和修改过的 parameter 文件,分别烧写到"boot" 和 "parameter" 分区,则可完成内核的更新。
一、编译内核
1、准备工作
(1)安装开发包
sudo apt-get install build-essential lzop libncurses5-dev libssl-dev
sudo apt-get install libc6:i386
(2)安装 mkbootimg 工具
git clone
cd rockchip-mkbootimg
make && sudo make install
(3)获取内核源码和安装交叉编译工具链
如果没有下载 SDK,则需要下载内核源码及 Android 的 arm-eabi-4.6 交叉编译工具链。
下载内核源码:
git clone
内核下载之后的内容如下所示:
下载交叉编译工具链,内核编译用到arm-eabi-4.6交叉编译工具链,
下载完成之后创建toolchain目录,并将交叉编译工具链拷贝到此目录下
解压文件
sudo tar -xzvf arm-eabi-4.6.tar.gz
2、编译内核
(1)编译内核映像
进入内核目录,设置ARCH环境变量,告诉编译器目标平台的架构; 设置交叉编译器。这两步需要一次执行,不然会报错
exportARCH=arm
export CROSS_COMPILE=./../toolchain/arm-eabi-4.6/bin/arm-eabi
在内核源码目录里执行:
载入Firefly RK3288开发板内核配置:
make firefly-rk3288-linux_defconfig
编译
make -j8 firefly-rk3288.img
出现错误:
进入Makefile,修改以下内容:
从中可以看出编译器的路径不正确,修改编译器的路径
修改之后的路径:
重新编译之后,编译成功。
(2)编译内核模块
在内核源码目录里执行:
make modules
mkdir modules_insatll
make INSTALL_MOD_PATH=./modules_install modules_install
内核模块是需要拷到根文件系统中即可:
3、创建 boot.img
(1)创建内存盘
内核启动时会加载内存盘作为初始的根文件系统,再加载实际的根存储设备,最后切换过去。因为开发板使用的是 eMMC 存储,不需要特别的驱动,因此实际上可以跳过此步。但内存盘可以做得非常灵活和强大,例如可以做多系统启动。
git clone
make -C initrd
initrd中包含了实现这个目标所需要的目录和可执行程序的最小集合,例如将内核模块加载到内核中所使用的 insmod工具。
在桌面或服务器Linux系统中,initrd是一个临时的文件系统。其生存周期很短,只会用作到真实文件系统的一个桥梁。
(2)打包内核和内存盘
将 kernel 和 initrd 打包成 boot.img:
Firefly官方发布的Ubuntu系统都是只有boot分区的,所以要将 kernel 和 initrd 打包成 boot.img,生成boot镜像用到了一个新工具mkbootimg,给mkbootimg增加可执行属性:
sudo mkbootimg --kernel arch/arm/boot/zImage --ramdisk ../initrd.img -o boot.img
产生的boot.img如下所示:
4、修改 parameter 文件
Linux 的根文件系统(RFS)可能在不同的分区或存储设备上(eMMC、TF 卡或 U 盘),所以需要在内核的参数中指定。修改 parameter 文件中的 CMDLINE 行:
5、烧写到设备
选择生成的 boot.img 和修改过的 parameter 文件,分别烧写到"boot" 和 "parameter" 分区,则可完成内核的更新。
举报
更多回帖
rotate(-90deg);
回复
相关问答
RK3288
Linux
内核
怎样
去
解决RK3399
内核
编译
出错的问题
呢
2022-03-07
1082
怎样
去
移植
linux
内核
呢
2021-10-19
1059
怎样
在
linux
环境
去
编译
Android源码
呢
2022-03-09
801
如何对Firefly-RK3399
Linux
内核
进行
编译
呢
2022-03-08
1655
怎样
才能只重新
编译
Linux
内核
模块包
呢
2022-12-23
260
怎样
去
修改RK3288的
内核
以便支持cifs和nfs
呢
2022-03-10
1764
请问一下
怎样
去
安装gcc-arm-
linux
-gnueabihf
编译
器?
2021-07-01
905
请问如何进入
linux
内核
命令行模式
去
加载.ko文件
呢
2022-01-07
1704
新手求助Android固件该
怎样
去
编译
呢
2022-02-18
1065
请问一下在Ubuntu上
怎样
去
编译
Linux
固件
呢
2022-03-09
1588
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分