内核与根文件系统的制作——小白学ARM(十)
嵌入式平台下的内核制作
- 清除原有配置、中间文件
make distclean
图形化配置内核
先找到教程提供的config-file文件,复制到内核目录下,改名为.config
运行:
make menuconfig ARCH=arm
在图形化配置界面上找到Initramfs_source选项:将Initramfs_source前的文件目录删除,以防出现错误。
- 编译内核
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文件夹,可以看到生成文件
创建设备文件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创建配置文件夹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
- 添加c运行库文件
库文件目录在/usr/arm-linux-gnueabihf/lib目录下,将该目录下的动态链接库文件(.so)拷贝到/rootfs/lib下
cp /usr/arm-linux-gnueabihf/lib/*.so* ./lib -d
设置NFS启动
- 配置内核
在图形化配置界面
General setup --- [ ]Initial RAM filesystem and RAM disk
File systems --- Network File Systems --- [*]Root file sysytem on NFS
退出,保存上述配置。
- 设置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