前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >busybox引导linux内核_linux移植教程

busybox引导linux内核_linux移植教程

作者头像
全栈程序员站长
发布2022-11-08 15:41:13
5.4K0
发布2022-11-08 15:41:13
举报
文章被收录于专栏:全栈程序员必看

一、搭建NFS服务器

查看另一篇博客:《1.3、Ubuntu18.04搭建NFS服务器

二、使用BusyBox构建跟文件系统

下载busybox源码:

【点此进入busybox官网】,网站链接为:https://busybox.net/。进入官网后依次查找下述菜单,进入下载页面。

代码语言:javascript
复制
->Get BusyBox
    ->Download Source

2.1 修改顶层Makefile

进入Makefile

代码语言:javascript
复制
vim Makefile

找到CROSS_COMPILE和ARCH,并进行修改

代码语言:javascript
复制
将
CROSS_COMPILE ?=

修改为   # 备注:后面的路径为交叉编译工具链安装路径
CROSS_COMPILE ?= /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
代码语言:javascript
复制
将
ARCH ?= $(SUBARCH)

修改为:
ARCH ?= arm

2.2 busybox中文支持

  1. 该步骤可有可无,此处不再赘述。可以查阅正点原子《嵌入式驱动开发指南》的《根文件系统构建》章节。

2.3 配置busybox

执行下属命令,采用默认配置即可:

代码语言:javascript
复制
make defconfig
make menuconfig

采用动态编译,所以不要选中:

代码语言:javascript
复制
Location:
    -> Settings
        -> Build static binary (no shared libs)

选中:

代码语言:javascript
复制
Location:
    -> Settings
        -> vi-style line editing commands

不要选中:

代码语言:javascript
复制
Location:
    -> Linux Module Utilities
        -> Simplified modutils

确保mdev下面的子选项全部选中:

代码语言:javascript
复制
Location:
    -> Linux System Utilities
        -> mdev (16 kb) //确保下面的全部选中,默认都是选中的

选中unicode编码,以支持中文选中unicode编码,以支持中文

代码语言:javascript
复制
Location:
    -> Settings
        -> Support Unicode //选中
        -> Check $LC_ALL, $LC_CTYPE and $LANG environment variables //选中

2.4 编译busybox

执行命令

代码语言:javascript
复制
make install CONFIG_PREFIX=/home/lsy/tools/lsy/nfs/rootfs

CONFIG_PREFIX参数指定生成的根文件系统保存的路径。

至此可以看到上述目录下已经生成了一个简单的文件系统,但是还需要添加一些其他文件完善rootfs。

2.5 向根文件系统添加lib库

2.5.1 向{rootfs}/lib目录下添加库文件

从交叉编译工具链的安装目录中拷贝lib库到rootfs的lib中。

在rootfs中创建lib文件夹

代码语言:javascript
复制
cd /home/lsy/tools/lsy/nfs/rootfs
mkdir lib

拷贝{交叉编译工具链安装目录}/libc/lib/中的库文件到{rootfs}/lib目录下

备注1:“-d”表示拷贝符号链接,有个比较特殊的库文件: ld-linux-armhf.so.3,此库文件是个符号链接,相当于 Windows 下的快捷方式。

备注2:rootfs/lib目录中的d-linux-armhf.so.3是一个软连接,没用,所以先删除在将源文件拷贝进去

代码语言:javascript
复制
cd /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib/
cp *so* *.a /home/lsy/tools/lsy/nfs/rootfs/lib/ -d
rm /home/lsy/tools/lsy/nfs/rootfs/lib/ld-linux-armhf.so.3
cp ld-linux-armhf.so.3 /home/lsy/tools/lsy/nfs/rootfs/lib/

拷贝{交叉编译工具链安装目录}/lib目录中的库文件到到{rootfs}/lib目录下

代码语言:javascript
复制
cd /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib/
cp *so* *.a /home/lsy/tools/lsy/nfs/rootfs/lib/ -d

2.5.2 向{rootfs}/usr/lib目录下添加库文件

在rootfs中创建lib文件夹

代码语言:javascript
复制
cd /home/lsy/tools/lsy/nfs/rootfs/usr
mkdir lib

拷贝{交叉编译工具链安装目录}/libc/usr/lib

代码语言:javascript
复制
cd /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib/
cp *so* *.a /home/lsy/tools/lsy/nfs/rootfs/usr/lib/ -d

至此,库文件添加完成,输入如下命令复查文件库文件大小

代码语言:javascript
复制
#命令:
cd /home/lsy/tools/lsy/nfs/rootfs/
du ./lib ./usr/lib -sh

#结果如下:
57M     ./lib
67M     ./usr/lib

2.6 创建其他文件夹

创建如下文件夹

代码语言:javascript
复制
cd /home/lsy/tools/lsy/nfs/rootfs/
mkdir dev proc mnt sys tmp root

三、测试文件系统(NFS挂载)

3.1 设置uboot中环境变量

设置uboot中环境变量,命令如下

代码语言:javascript
复制
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.0.250:/home/lsy/tools/lsy/nfs/rootfs ip=192.168.0.100:192.168.0.250:192.168.0.1:255.255.255.0::eth0:off'
saveenv

3.2 命令解析

命令解析

代码语言:javascript
复制
console=ttymxc0,115200

解析:
    串口
代码语言:javascript
复制
root=/dev/nfs rw 

解析:
    nfs,可读可写
代码语言:javascript
复制
nfsroot=192.168.0.250:/home/lsy/tools/lsy/nfs/rootfs 

解析:
    192.168.0.250是nfs服务器IP,即:nfs文件系统所在linux机器的IP
    /home/lsy/tools/lsy/nfs/rootfs是rootfs保存的目录。
代码语言:javascript
复制
ip=192.168.0.100:192.168.0.250:192.168.0.1:255.255.255.0::eth0:off'

解析:
    192.168.0.100为:开发板ipaddr
    192.168.0.250为:nfs服务器的IP
    192.168.0.1为:网关
    255.255.255.0为:子网掩码
    eth0为:网卡名称

四、完善文件系统

4.1 创建{rootfs}/etc/init.d/rcS 文件

rcS 是个 shell 脚本, Linux 内核启动以后需要启动一些服务,而 rcS 就是规定启动哪些文件的脚本文件。

创建rcs文件

代码语言:javascript
复制
cd /home/lsy/tools/lsy/nfs/rootfs/
mkdir etc/init.d -p    #注意路径是在rootfs目录下,即上步的cd命令一定要先执行,千万别敲成根目录了
cd etc/init.d/
touch rcS
vim rcS

在rcs中加入如下代码:

代码语言:javascript
复制
#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
export PATH LD_LIBRARY_PATH

mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts

echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

赋予rcS文件可执行权限

代码语言:javascript
复制
chmod 777 rcS

4.2 创建{rootfs}/etc/fstab 文件

创建fstab文件

代码语言:javascript
复制
cd /home/lsy/tools/lsy/nfs/rootfs/etc/
touch fstab
vim fstab

在文件中加入如下内容:

代码语言:javascript
复制
#<file system>   <mount point>   <type>   <options>   <dump>   <pass>
proc             /proc           proc     defaults    0        0
tmpfs            /tmp            tmpfs    defaults    0        0
sysfs            /sys            sysfs    defaults    0        0

4.3 创建{rootfs}/etc/inittab 文件

创建inittab文件

代码语言:javascript
复制
cd /home/lsy/tools/lsy/nfs/rootfs/etc/
touch inittab
vim inittab

在文件中加入如下内容:

代码语言:javascript
复制
#etc/inittab
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/185159.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月6日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、搭建NFS服务器
  • 二、使用BusyBox构建跟文件系统
    • 2.1 修改顶层Makefile
      • 2.2 busybox中文支持
        • 2.3 配置busybox
          • 2.4 编译busybox
            • 2.5 向根文件系统添加lib库
              • 2.5.1 向{rootfs}/lib目录下添加库文件
              • 2.5.2 向{rootfs}/usr/lib目录下添加库文件
            • 2.6 创建其他文件夹
            • 三、测试文件系统(NFS挂载)
              • 3.1 设置uboot中环境变量
                • 3.2 命令解析
                • 四、完善文件系统
                  • 4.1 创建{rootfs}/etc/init.d/rcS 文件
                    • 4.2 创建{rootfs}/etc/fstab 文件
                      • 4.3 创建{rootfs}/etc/inittab 文件
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档