内核与根文件系统的制作——小白学ARM(十)

嵌入式平台下的内核制作

  1. 清除原有配置、中间文件
make distclean
  1. 图形化配置内核

    先找到教程提供的config-file文件,复制到内核目录下,改名为.config
    运行:

make menuconfig ARCH=arm

在图形化配置界面上找到Initramfs_source选项:将Initramfs_source前的文件目录删除,以防出现错误。

  1. 编译内核
make uImage ARCH=arm CROSS_COMPILE=arm-linux-

可能出现的错误:

Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.

删掉了kernel/timeconst.pl 文件中 373行的 if (!defined(@val)) { 改为 if (!@val) { 后,编译成功。

“mkimage” command not found – U-Boot images will not be built

原因:未安装uboot里带的mkimage,
只需要输入:sudo apt-get install u-boot-tools,安装即可

根文件系统制作(制作失败,挪用现成的文件系统)

流程都是按教程来的,最后做出来的文件系统怎么都挂在不上,内核启动时一直会卡在一个地方,没办法,只能先把教程里做好的文件系统拷贝过来先用着,下面是我的制作流程,大家不要看,这里只是记录一下,方便日后找错

  • 使用busybox(其中,arm-linux-gnueabihf-一众编译器位于/usr/bin目录下)

  • 官网下载版本:1.29.3.tar.bz2,解压至linux下目录,进入解压目录

     执行:make menuconfig,进入图形化配置界面
     settings --->
     	--- Build Options
     		[*] Build static binary(no share libs),勾选
     
     		() Cross compiler prefix,选中,写入:arm-linux-gnueabihf-,若只写arm-linux-会报错
     		
     	--- Installation Options
     		(./_install)Destination path for 'make install',保持默认路径
    

退出,保存上述配置。
执行:make
创建文件夹:/home/linux/lab/rootfs,保存busybox生成文件
执行:make CONFIG_PREFIX=/home/linux/lab/rootfs install (应该先将中Installation Options安装路径修改,此命令作修正)
查看rootfs文件夹,可以看到生成文件

  1. 创建设备文件dev
    创建文件夹:/home/linux/lab/rootfs/dev
    cd rootfs/dev
    sudo mknod -m 666 console c 5 1
    sudo mknod -m 666 null c 1 3

  2. 创建配置文件夹etc
    创建文件夹:

/home/linux/lab/rootfs/etc
cd rootfs/etc

*//busybox提供一些初始化脚本范例:

/home/linux/lab/busybox-1.29.3/examples/bootfloppy/etc

*//将该文件夹下所有文件拷贝到创建的etc目录下

cp -a /home/linux/lab/busybox-1.29.3/examples/bootfloppy/etc/* ./

修改inittab文件

vi inittab

打开文件,改为以下内容:(只是脚本,可自行编写)

::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::ctlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init

# /etc/inittab
::sysinit:/etc/init.d/rcS
		ttySAC0::askfirst:-/bin/sh
		::ctrlaltdel:/sbin/reboot
		::shutdown:/bin/umount -a -r

修改fstab文件(创建文件夹:mkdir lib proc sys tmp mnt)

proc            /proc   proc    defaults    0   0
tmpfs           /tmp    tmpfs   defaults    0   0

修改init.d/rcS文件(管理设备挂载)

#! /bin/sh
/bin/mount -a
/bin/mkdir -p /dev/pts
/bin/mount -t devpts devpts /dev/pts
/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s

修改profile文件(创建文件夹:/home/linux/lab/rootfs/root)

# /etc/profile: system-wide .profile file for the Bourne shells
export HOSTNAME=zyz
export USER=root
export HOME=/root
export PS1="[$USER@$HOSTNAME:\$PWD]\# "
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
export LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
  1. 添加c运行库文件
    库文件目录在/usr/arm-linux-gnueabihf/lib目录下,将该目录下的动态链接库文件(.so)拷贝到/rootfs/lib下
cp /usr/arm-linux-gnueabihf/lib/*.so* ./lib -d

设置NFS启动

  1. 配置内核
    在图形化配置界面
General setup --- [ ]Initial RAM filesystem and RAM disk
File systems --- Network File Systems --- [*]Root file sysytem on NFS

退出,保存上述配置。

  1. 设置uboot启动参数(以下为一行命令)
setenv bootargs noinitrd console=ttySAC0,115200 
init=/linuxrc root=/dev/nfs rw nfsroot=192.168.1.128:/home/linux/lab/rootfs 
ip=192.168.1.121:192.168.1.128:192.168.1.2:255.255.255.0::eth0:off

版权声明:本文为qq_38406667原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。