2016.04
一 linux 内核配置与编译
将光盘提供的内核文件解压,进入linux内核文件总目录
清除:
执行make distclean
配置:
cp foxlin210 .config(官方提供好的config文件)
执行make menuconfig (需要先安装nurse-dev)
ls -a查看隐藏文件.config
编译:
make zImage开始编译,时间5-10min
编译好的uImage在/linux_x.x.x/arch/arm/boot中
注:使用内核文件需要借助uboot,可以自动烧录也可以用cmdline加载
二 Uboot的配置与编译
主要就是
1 make distclean
2 make xx_config
3 make
最后生成uboot.bin文件
三 文件系统的配置与编译
这一章跟第一章的联系更为紧密一些,编译出来的kernel uImage不能直接进行运行,需要我们再创立一个rootfs。
主要步骤有两步:1,创立目录2,安装配置各个目录的内容
这里介绍initramfs和NFS
这两个区别在于initramfs是将文件系统集成在kernel中,如果需要在文件系统中添加某些文件,需要进行内核的重新编译;
而NFS一般在开发阶段使用,可以使得开发板上的内核和文件系统使用主机端的文件和系统;
主要步骤:
---------根文件系统制作---------
1.创建目录
mkdir rootfs
cd rootfs
mkdir bin dev etc...
mkdir usr/bin usr/lib.....
2.创建设备文件
cd dev/
mknod -m 666 console c 5 1
mk node -m 666 null c 1 3
cd ..
3.安装/etc配置文件,这里直接使用x86系统的解压包
tar etc.tar.gz -C /xxx/rootfs
4.编译内核模块
makie module ARCH=arm CROSS_COMPILE=arm-linux-
5.安装内核模块(存在/rootfs/lib/kernel/modules/driver/char)
make modules_install ARCH=arm INSTAL_MOD_PATH=/xxx/rootfs
6.配置busybox
cd busybox-1.17.2
make menuconfig
----------------build option:build busybox as a static
----------------------------------cross compiler prefix-》arm-linux-
-------------install option:填写rootfs的路径
7.编译安装busybox
make ARCH=arm CROSS_COMPILE=arm-linux-
make install
结束后在rootfs/bin/中检查可以发现多了许多命令
---------文件系统制作---------
配置内核:make menuconfig ARCH=arm
打开Initial RAM file system and RAM disk support
或者(NFS):Network File System:1client system support 2root NFS
进入根文件系统进行软连接
ln -S ./bin/busybox init (ln -s P1 P2 软链接, P2指向P1)
最后重新编译内核make uImage ARCH=arm CROSS_COMPILE=arm-linux-
四 内存管理
32位:二级映射 pgd(目录表,10位)->pte(页表,10位),pte中的每个页有12位,4K数据.
64位:
1、硬件查表不会去“执行”代码,32位系统中就是cr3找pgd,然后找pte
2、“统一成四级映射”只是说内核去构造相应的分页表的时候而已。大概看了一下代码,好像是这样的:
a, nopud的情况下(nopmd类似)分配pud是返回空的
b, nopud的情况下获取pud实际返回的是pgd
c, 综合上述情况,实际就是构造分页表的时候,首先分配pgd,然后分配pud(NULL),pgd指向null,然后分配pmd(NULL),pud(根据b返回的是pgd)指向pmd,然后pmd(返回的还是pgd)指向pte