本文共 3326 字,大约阅读时间需要 11 分钟。
本次实验采用的时64位ubuntu14.04
网址 https://www.kernel.org/pub/linux/kernel/v2.6/
解压缩 tar jvxf linux-2.6.33.7.tar.bz2 设置环境变量 export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabi-1.配置内核 make versatile_defconfig
2.编译 make zImage 3.将编译出的zImage拷贝到顶层目录 cp arch/arm/boot/zImage …/zImage 4.在qemu-system-arm中启动Linux qemu-system-arm -M versatilepb -m 128M -kernel zImage 注:未能成功,需要制作文件系统,后续介绍BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android 系统的自带的shell。
终端执行:
wget http://busybox.net/downloads/busybox-1.27.2.tar.bz2解压 tar jvxf busybox-1.27.2.tar.bz2
3.创建rootfs目录设置环境变量
export ARCH=arm - export CROSS_COMPILE=arm-linux-gnueabi-编译
make defconfig make menuconfigBusybox Settings -> BusyBox installation prefix
设置为 “…/rootfs” 注:如果make menuconfig报错,请安装 libncurses5-dev编译 make install
init是Linux系统操作中不可缺少的程序之一。所谓的init进程,它是一个由内核启动的用户级进程。内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。
内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式, 完成引导进程。所以init始终是第一个进程(其进程编号始终为1)。 创建init文件,写入内容将rootfs目录打包成initramfs
创建文件initramfs 填入内容执行 make menuconfig
将Initial RAM filesystem and RAM disk(initramfs/initrd) support () Initramfs source files(s) 改为…/initramfs.list重新编译并启动
qemu-system-arm -M versatilepb -m 128M -kernel zImage - append “noinitrd root=/dev/ram0”修改etc/init文件
1.创建inittab文件写入:
2.创建rootfs/etc/init.d/rcS文件写入:
3.创建rootfs/etc/passwd文件写入:
4.修改initramfs.list文件写入
5.重新编译运行
qemu-system-arm -M versatilepb -m 128M -kernel zImage -append “noinitrd root=/dev/ram0” login:root Password:admin6.登陆进入全功能shell
1.Crossing GCC
GNU Compiler’s Collection2.Make
Make可以从一个名为makefile的文件中获得如何构建你所写程序的依赖关系,Makefile中列出了每个目标文件以及如何由其他文件来生成它。 当你编写一个程序时,你可以为它编写一个makefile文件,这样你就可以使用Make来编译和安装这个程序。 3.Vi/Emacs 即强大且著名的文本编辑器,给开发带来了诸多便利 4. GDB/GDB Server 调试工具 源码 https://ftp.gnu.org/gnu/gdb/gdb-7.6.tar.gz 解压并安装1.安装
分别在host和目标板上安装gdb和gdbserver2.调试
编译 arm-linux-gnueabi-gcc -static -g hello.c -o hello 编写一个简单的 hello.c文件: #include “stdio.h” void main(void) { printf(“hello world ! \n”); printf(“nihao ! \n”); printf(“hello world ! \n”); }1.修改initramfs.list文件,在文件末尾添加:
file /usr/bin/gdbserver …/gdbserver 755 0 0 file /hello …/hello 755 0 0 2. 重新编译内核 make zImage 3. 启动 sudo qemu-system-arm -M versatilepb -m 128M -net nic -net tap,ifname=tap0 - kernel zImage -append “noinitrd” 4. 配置网络接口 ifconfig eth0 192.168.11.133(ifconfig查看主机ip) Ping网关 ping 192.168.11.1335 .在qemu系统中
cd / gdbserver :12345 ./hello 等待host连接 6. 在host中 运行arm-linux-gnueabi-gdb target remote 192.168.159.100:12345 #连接远端的gdbserver symbol-file hello -----------#加载调试符号 b main ------------------------#在main处设置断点 c ------------------------------ #开始执行,程序停止在main() s -------------------------------#单步运行 …… 等进行程序调试图5.2.2-1 在qemu中运行程序
嵌入式linux 是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。嵌入式linux既继承了Internet上无限的开放源代码资源,又具有嵌入式操作系统的特性。嵌入式Linux的特点是版权费免费;购买费用媒介成本技术支持全世界的自由软件开发者提供支持网络特性免费,而且性能优异,软件移植容易,代码开放,有许多应用软件支持,应用产品开发周期短,新产品上市迅速,因为有许多公开的代码可以参考和移植,实时性能RT_Linux Hardhat Linux 等嵌入式Linux支持,实时性能稳定性好安全性好。
转载地址:http://gwxg.baihongyu.com/