uboot
版本:u-boot-2018.09
1、生成配置文件, make ARCH=arm vexpress_ca9x4_defconfig
2、图形配置
make menuconfig
3、编译Uboot make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4
4、qemu启动uboot qemu-system-arm -M vexpress-a9 -cpu cortex-a9 -m 256 -kernel u-boot --nographic
5、退出QEMU组合键 ctrl+a,然后按x
参考 https://blog.csdn.net/jqh_111/article/details/83720406
交叉编译器 4.5.1
kernel
版本:linux-4.4.157
配置
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- vexpress_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig -j4 O=./object
全编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4 O=./object
部分编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- zImage
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules //编译驱动模块
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- dtbs // 编译设备树
nfs启动uImage:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- LOADADDR=0x60003000 uImage -j4 O=./object
busybox
版本:busybox-1.31.1
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- install
mkdir rootfs cp share/busybox-1.31.1/_install/* rootfs/ -rfd
mkdir rootfs/lib cp /usr/local/arm/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi/lib/* rootfs/lib/ -rfp
cd /usr/local/arm/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi/arm-linux-gnueabi/libc/lib cp so *.a /home/peich/nfsroot/rootfs/lib/ -d
mkdir ~/nfsroot/rootfs/usr/lib/ cd /usr/local/arm/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi/arm-linux-gnueabi/lib cp so *.a /home/peich/nfsroot/rootfs/usr/lib/ -d
mkdir rootfs/dev cd rootfs/dev
//创建4该个串口节点
sudo mknod -m 666 tty1 c 4 1 sudo mknod -m 666 tty2 c 4 2 sudo mknod -m 666 tty3 c 4 3 sudo mknod -m 666 tty4 c 4 4
mknod -m 666 tty1 c 4 1 命令中 mknod表示创建结点 -m设置权限为666 tty表示串口 c表示字符设备 4表示主设备号,1表示次设备号
//创建工作台节点
sudo mknod -m 666 console c 5 1
//创建null节点
sudo mknod -m 666 null c 1 3
模拟sd卡启动
cd ~
- 生成跟文件系统镜像 rootfs.ext3。bs表示缓冲区大小,count表示块大小。直接把rootfs.ext3看成一张SD卡
dd if=/dev/zero of=rootfs.ext3 bs=1M count=64
- 格式化rootfs.ext3
mkfs.ext3 rootfs.ext3
- 将各种文件拷贝到文件系统镜像中
需要注意的是,块设备是不能直接读写的,需要挂载到目录,然后对目录进行相应的操作
? a. sudo mount -t ext3 rootfs.ext3 /mnt -o loop
mount [-fnrsvw] [-t vfstype] [-o options] device dir
-t ext3表示文件系统是ext3格式
其中 -o loop 使用loop模式用来将一个档案当成硬盘分割挂上系统。
? b. 挂载完毕,输入ls /mnt查看SD卡内容(空的)
? c. 拷贝文件到SD卡中 sudo cp -rf rootfs/* /mnt/
? d. 卸载SD卡sudo umount /mnt
启动内核:
无UI
qemu-system-arm -M vexpress-a9 -cpu cortex-a9 -m 256 -kernel ~/share/linux-4.4.157/object/arch/arm/boot/zImage -dtb ~/share/linux-4.4.157/object/arch/arm/boot/dts/vexpress-v2p-ca9.dtb --nographic -append “root=/dev/mmcblk0 rw console=ttyAMA0 ” -sd rootfs.ext3
有UI
qemu-system-arm -M vexpress-a9 -cpu cortex-a9 -m 256 -kernel ~/share/linux-4.4.157/object/arch/arm/boot/zImage -dtb ~/share/linux-4.4.157/object/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -append “root=/dev/mmcblk0 rw console=tty0 ” -sd rootfs.ext3
参考:
https://blog.csdn.net/ReCclay/article/details/102319392
https://blog.csdn.net/u013738338/article/details/82961049
nfs挂载rootfs
- 启动uboot,ping通ubuntu以后,手动传入kernel,dtb,逐渐挂载启动文件系统
cd share/u-boot-2018.09/ sudo qemu-system-arm -M vexpress-a9 -kernel u-boot -nographic -m 512M -net nic,vlan=0 -net tap,vlan=0,ifname=tap0
- 设置ip
setenv ipaddr 192.168.1.65 setenv serverip 192.168.1.63 ping 192.168.1.63
- tftp下载uImage与dtb
tftp 0x60003000 uImage
或者 tftp 0x60003000 zImage
将下载到内存中的数据与原来的uImage进行比对:
? qemu模拟的开发板uboot:md 0x60003000
? 本机ubuntu:hexdump -C uImage | less
可以看出字节序相反,因为arm默认内存是小端模式
tftp 0x60500000 vexpress-v2p-ca9.dtb
- 设置启动参数
setenv bootargs ‘root=/dev/nfs rw nfsroot=192.168.1.63:/home/peich/nfsroot/rootfs,v3 init=/linuxrc ip=192.168.1.65 console=ttyAMA0’
- 启动运行
bootm 0x60003000 - 0x60500000
bootz 0x60003000 - 0x60500000
? 其中bootm、bootz的命令格式
? bootm [addr [initrd[:size]] [fdt]]
? bootz [addr [initrd[:size]] [fdt]]
? 命令 bootm、bootz 有三个参数, addr 是 Linux 镜像文件在 DRAM 中的位置, initrd 是 initrd 文件在DRAM 中的地址,如果不使用 initrd 的话使用‘-’代替即可, fdt 就是设备树文件在 DRAM 中的地址。
参考:https://blog.csdn.net/u010344264/article/details/82949143
|