4

全志V3S嵌入式驱动开发(移植linux kernel和rootfs)

 1 year ago
source link: https://blog.csdn.net/feixiaoxing/article/details/130859157
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

全志V3S嵌入式驱动开发(移植linux kernel和rootfs)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        除了少部分嵌入式设备使用vxworks和freertos之外,大部分嵌入式都是使用linux来做基础os来使用的。linux使用场景很多,除了大家都知道的android设备、娱乐设备之外,在汽车、工控、网络交换机、服务器等领域,linux也扮演着重要的角色。所以,对于linux或者linux kernel来说,大家没必要神话它,也没有必要轻视它,就把它当成一个工具好了,该优化优化、该加驱动加驱动、该写上层软件写上层软件就行。

        前面学习了uboot,板子是可以启动了,但是不能称之为一个完整的系统,因为它还缺少了两样东西,一个是linux kernel,一个是rootfs。

        不同厂家的soc,一般对uboot和kernel,他们自己都已经移植好了,用户只需要到对应的地址下载代码编译即可。而对于rootfs,如果本身没有特殊的需求,可以考虑直接使用别人做好的rootfs.tar,这样效率会高很多。

1、下载linux kernel

git clone https://github.com/Lichee-Pi/linux.git -b zero-4.10.y

        不出意外,我们就可以下载到4.10.y版本的linux内核代码,首先,配置config文件

make ARCH=arm licheepi_zero_defconfig

        接着,开始编译内核,

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

        这个时候就可以搜索发现,生成了一个zImage文件,接着继续编译设备树

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs

        最后就是生成驱动modules,

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=out modules

        当然,如果需要自己把驱动放到统一的目录里面,就可以这么做,

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=out modules_install

2、编译rootfs

        关于rootfs,一般都是用buildroot进行配置编译的。之前练习的时候,下载的buildroot版本是buildroot-2017.08.tar.gz。这部分还是建议使用别人编译好的根文件系统,差别不大,编译好之后,在./output/images目录下面,会有一个rootfs.tar文件,这就是我们需要的根文件系统。在文章的最后,我们也给出了自己编译好的rootfs.tar下载地址,供大家参考。

3、烧入sd卡

        除linux kernel编译和rootfs编译之外,另外很重要的一个部分就是sd卡烧入。所有的操作都是在ubuntu虚拟机里面完成的,有这么几个流程,

3.1 分区

        利用ubuntu里面的fdisk进行分区,输入

sudo fdisk /dev/sdb

        分成两个区即可,第一个分区32M,剩下的空间留给另外一个分区,注意在第一个分区的最后一步输入+32M即可。

3.2 在刚才创建好的分区构建文件系统

3.3 重新插拔sd卡

3.4 拷贝文件

        把zImage和sun8i-v3s-licheepi-zero.dtb拷贝到vfat分区,与此同时把rootfs.tar拷贝到ext4分区,并解压,

tar -xvf rootfs.tar ./

        因为之前已经烧入过uboot,这步可以省略,当然不放心的话,可以再烧入一下,

sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdb bs=1024 seek=8

3.5   重启板子,因为uboot中我们没有对代码进行修改,所以uboot启动后,需要输入下面这些命令,才能启动kernel

4、效果图

        之前说过,uboot启动后,如果需要进入Linux,那么需要进行一些配置,效果如下,

221759927b9e45178b330fb87bb54635.png

         所有命令输入完毕之后,也就是输入bootz 0x41000000 - 0x41800000后,kernel就可以开始启动了,

7e30dc37f5f74c79ad0ab413e7ab64f0.png

         因为目前驱动的内容比较少,上层软件也不多,所以不到2s就启动结束,这里输入rootfs之后,马上就进入根文件系统了,

12e35cd572ad4b83b7acb436bdb295af.png

         至此,一个最小的嵌入式linux系统就已经实实在在的跑起来了。

        最后为了大家使用方便,这里给出rootfs.tar资源,有小伙伴希望直接可以拿过来用的话,那么可以直接下载使用,https://download.csdn.net/download/feixiaoxing/87816983


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK