制作uboot:
- 源码, vi Makefile , 指定交叉编译工具链
- vi boards.cfg ------------ 查看到已支持的板子,
- make origen_config , make 生成origen板子的uboot
- uboot 源码不支持当前的开发板
- 查看uboot 支持不支持当前开发板的处理器 , 不支持结束
- 参考uboot已支持开发板orgien(和当前开发板是同样的处理器)
- 拷贝origen开发板的c代码
- 拷贝origen开发板的配置文件
- vi boards.cfg ,新增一个开发板fs4412
- make fs4412_config , 生成uboot 针对fs4412开发板的配置文件
- make ---------- 生成针对fs4412开发板的u-boot.bin
12 .点灯法 ------------ 确保u-boot.bin 被搬到ddr
13 .串口输出
- 网络芯片移植, uboot的网络命令(ping, tftp等)就可以执行
- 电子硬盘的移植(emmc), uboot的电子硬盘的命令(movi read, movi write等)就可以执行
补丁的方式制作u-boot-fs4412.bin
浏览u-boot 源码?
arm-none-linux-gnueabi-objdump -dl u-boot > u-boot.s
vi u-boot.s
在vi里,移动光标------->有路径、文件的行------->按gF------>跳转到源代码------->ctrl+o 退出源码
linux内核配置和编译:
.config 当前的配置
make menuconfig 继续配置, 配置的结果保存.config
各个目录下的Makefile
编译各个目录的时候, 依赖.config , 参考各个目录下的Makefile, 就知道哪些文件会被编译到内核
各个目录下的Kconfig
Kconfig 文件提供了(图形化配置界面里的)菜单选项TEST_CONFIG, 用户make menuconfig 去打开或关闭TEST_CONFIG , 在Makefile 文件里, 依赖开关TEST_CONFIG,选择性的编译或不编译某些程序到内核
uImage 不管下载到内存的哪里,最终解压到 40008000
生成内核过程:
vmlinux ----------- elf格式, 最原始的内核, 未经压缩的内核
zImage ---------- zlib 压缩后的内核
uImage --------- 64字节的头 + zImage ---------------- bootloader是uboot的时候, 使用uImage
内核调试方法:
- 点灯法
- 串口输出信息:
- puts --------------内核解压前
- printfascii --------------- 内核解压后, console 初始化前
- prink ---------- 内核解压后, console 初始化后
printk(KERN_ERR“this is a error for mem\n”);
printk(“this is a error for mem\n”);
printk 打印级别:
cat /proc/sys/kernel/printk 查看当前中断的printk 的打印级别
4 4 1 7
门槛 默认级别 门槛值的最小(最高优先级) 默认的门槛值
echo “ 2 5 1 7” > /proc/sys/kernel/printk------> 修改级别
再次查看级别 cat /proc/sys/kernel/printk
2 5 1 7
内核信息的查看手段:
cat /proc/kmsg ----------------- 查看内核的打印信息(操作内核)
dmesg | tail ----------------- 查看内核最新的20 条信息
linux 下, 设备即文件
创建设备文件:
mknod /dev/xxxx c 250 100
在dev目录下产生设备文件xxxx, c------ 字符设备文件, 250 -- 主设备号 100 -- 从设备号
init进程:
1.解析inittab 文件
id:runlevel:动作:针对这个动作需要的处理
::sysinit:/etc/init.d/rcS
2.开始执行rcS
vi init.d/rcS
3.依赖fstab 文件, 开始挂载
/bin/mount -a
4.挂载devpts 到 /dev/pts 目录
mkdir /dev/pts
mount -t devpts devpts /dev/pts
5.让/sbin/mdev 程序成为内核的热插拔程序
echo /sbin/mdev > /proc/sys/kernel/hotplug
6.使用mdev 程序创建设备文件
mdev -s