1、内核的概念
Linux的内核就是Linux内部比较核心的一段代码,他是用来管理计算机的,主要包含:内存、进程、设备、文件系统、网络;内核将硬件与用户隔离开来,防止用户直接操作操作底层硬件;
2、Linux3.5内核编译与配置
步骤:
1)将内核的压缩包拷贝到虚拟机里
2)解压压缩包(是Linux3.5内核)
tar xvf linux-3.5-20141114.tar
3)进入到解压后的目录
linux内核支持的版本有很多,不光支持ARM架构,还支持mips x86
我们现在想让他编译ARM架构对应的东西,就需要修改Makefile 的196 和 197行将
ARCH ?= arm #架构
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)#交叉编译工具
改成
4)配置其他东西
安装图形化界面软件
1:执行
sudo apt-cache search ncurses
sudo apt-get install libncurses5-dev
2:调出来这个图形化的界面的命令(终端不要放大的过大 不然会报错)
make menuconfig
会生成一个.config文件
3:内核配置
由于内核配置选项较多,我们直接使用友善之臂提供的.config文件
我们将tiny4412_linux_defconfig拷贝到我们生成的.config文件里
5)去掉内核的保护机制(必须要去掉)
进到可视化界面
System Type --->
[ ] Support TrustZone-enabled Trusted Execution Environment
保存退出
6)修改文件
文件的路径 kernel/timeconst.pl
在文件的373行 if (!defined(@val)) 改成 if (!(@val))
7)编译内核
make -j5 && make zImage -j5
8)内核的烧写
要想烧写内核到开发板,首先我们要知道生成的镜像文件zlmage文件的位置
查阅相关文件得知:linux-3.5/arch/arm/boot/
要烧录的位置是:sd卡的第一个分区的第1057扇区
烧写的命令:dd iflag=dsync oflag=dsync if=./zImage of=/dev/sdb seek=1057
注意:
当我们将zlmage烧录完成之后,给开发板上电,uboot会自动的引导内核启动,uboot上电后会执行一条指令:
bootcmd=movi read kernel 0 40008000;movi read rootfs 0 41000000 400000;bootm 40008000 41000000
命令含义:读取内核到内存里的400080000位置处,然后再跳到40008000处执行内核。
3、根文件系统
1)根文件系统概念
根文件系统就是管理各种各样的文件的系统(Linux下一切皆文件)
真正的操作系统,他是由内核+文件系统构成的。
2)根文件系统制作
一般来说要想制作一个根文件系统需要首先生成三个文件夹
bin:一般用来存放可ARM架构的执行程序
lib:内核所需的库文件
include:内核所需的头文件
这三个文件夹也是比较重要的文件夹
3)busybox的使用
1)解压busybox的压缩包
tar xvf busybox-1.21.1.tar.bz2
2)进入到busybox目录执行
make menuconfig
3)配置交叉编译工具
Busybox Settings --->
Build Options --->
(arm-linux-) Cross Compiler prefix
4)配置共享库
Busybox Settings --->
Build Options --->
[*] Build shared libbusybox
5)配置busybox的安装路径
生成的文件系统存放的位置
Busybox Settings --->
Installation Options ("make install" behavior) --->
(/home/lym/work/rootfs) BusyBox instasllation prefix
6)添加模块相关的命令支持
Linux Module Utilities --->
7)编译并安装
make && make install
这个命令执行完成之后 就会在指定的位置生成三个文件夹
8)将交叉编译工具的库复制到文件系统里
在根文件系统目录下执行
cp /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/ ./ -rap
9)创建其他的目录
在根文件系统目录下执行
mkdir dev etc/init.d home proc sys root opt tmp var -p
10)创建控制台和垃圾桶设备文件
sudo mknod dev/console c 5 1
sudo mknod dev/null c 1 3
11)新建etc目录下的fstab文件
vim etc/fstab
添加如下内容
# device mount-point type options dump fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
12)新建etc下的inittab文件
vim etc/inittab
添加如下内容
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
13)新建etc/init.d/rcS
vim etc/init.d/rcS
添加如下内容
#!/bin/sh
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
/bin/hostname XYD
给rcS添加上可执行权限
chmod +x etc/init.d/rcS
14)新建profile文件
vim etc/profile
添加如下内容
USER="`id -un`"
LOGNAME=$USER
PS1='[\u@\h \W]# '
PATH=$PATH
HOSTNAME=`/bin/hostname`
export USER LOGNAME PS1 PATH
15)添加group和passwd
cp /etc/group /etc/passwd ./etc/