提示:对于想从单片机转型到嵌入式linux的工程师必看。
文章目录
前言
对于想从单片机转型到嵌入式Linux的工程师而言,目前市面上的开发板、教学视频种类繁多,让人眼花缭乱,基本上一上来就是在Linux下一顿操作,最后通过nfs等手段下载在开发板上,实现了想要的功能,说实话干单片机的工程师,有几个看得懂这些操作背后干了什么,涉及的过程是什么,用了哪些软件等等,本人始终想要把其中的过程讲清楚说明白,一定要从全局到局部的讲解,通过反复学习某位大佬的开发板和写的书,有些以前一直不理解找不到答案的概念,使用人工智能(不懂的概念就去问他)等手段,慢慢对其中的过程有了一定的了解,只能说人工智能大大降低了学习难度。
一、嵌入式linux系统的基本组成
1.硬件
- SOC(CPU、MMU、内部内存(SRAM))
- 外部内存(SDR SDRAM、DDR SDRAM)
- 外部“硬盘”(NOR\NAND Flash 、 SD卡等)
2.软件
- u-boot
- linux内核
- 根文件系统
- 设备树
二、嵌入式linux开发工具
1.必要的PC端软件
- 交叉编译工具(Linux)
- linux内核
- 其他串口(Windows)、ftp等工具(Windows、Linux)
2.软件源码
- u-boot
- linux内核
- busybox
三、u-boot 编译bin文件
- 配置:make smdk2410_config,就是make命令(软件去找到顶层makefile的内容,执行里面的内容),会生成.config文件
- 编译链接:make all,又去make命令(软件去找到顶层makefile的内容,执行里面的内容),最后生成.bin文件
注意:make命令和makefile是功能强大的组合,make smdk2410_config会执行PC端一些上位机软件生成.config文件,
make all又会调用交叉编译工具生成在ARM可以运行的bin文件,所以make命令和makefile其实是去调用其他的软件干活
而且有时候会调用PC端的GCC去编译生成PC的软件,这就是为什么编译嵌入式linux内核的时候会生成一些软件,不知道的还以为是arm-linux-gcc编译出来的,具体要看makefile里面内容
四、linux内核编译成uImage、zImage、vmlinux
五、构建根文件系统之busybox
- 配置:make menuconfig,就是make命令(软件去找到顶层makefile中menuconfig的内容,执行里面的内容),会生成.config文件
- 编译:make,使用arm-linux-gcc编译busybox的源码,生成的是一个可以在嵌入式linux环境中可以运行的程序busybox,其他的如在嵌入式linux之执行ls,就是调用的busybox ls,ls只不过是busybox软件的一个参数,所以他们也叫ls是到busybox的符号链接
- 安装:make CONFIG_PREFIX=/work/nfs_root/fs_mini intall,会在/work/nfs_root/fs_mini文件中生成一些文件夹和可以在嵌入式linux运行的命令(软件)
六、构建根文件系统之其他文件夹
七、制作烧写到nand flash中文件系统映像
- 下载ysffs源码
- 编译: make 貌似源码中会有makefile,里面应该有使用gcc编译源码,这样就生成了在PC端Linux可以运行的上位机mkyaffsimage
- 拷贝:将上一个阶段生成的上位机复制到PC端Linux的系统路径/usr/local/bin中,这样就可以在电脑终端上运行mkyaffsimage生成yaffs格式的印象文件,如fs_mini.yaffs
总结
我们所有的疑问目前是卡在嵌入式linux内核和makefile,嵌入式linux内核是因为我们不知道它是怎么玩的,他怎么就可以识别yaffs格式的印象文件,它怎么就可以运行使用arm-linux-gcc编译的应用程序,应用程序在哪里运行,arm-linux-gcc不是编译bin文件用的吗,运行库是什么东西,linux内核是如何解析文件系统,如何解析自己并运行的,这些后面一一解答,我们其实可以参考windows系统,只要内核运行起来的就想windows一样了,大家就不用关系细节了,现在还有一点就是ARM中断和linux异常处理的联系和区别没有搞懂???还有就是makefile因为功能太强大了,里面有各种符号,如何一级一级调用下一层的makefile,这个有点复杂!!!