蜗窝讨论区

慢下来,享受技术

您尚未登录。

#1 2016-09-10 21:49:20

wowo
管理员
注册时间: 2016-04-18
帖子: 196

【任务4】启动Linux kernel到命令行

1. 任务说明

通过“【任务3】Linux kernel的配置、编译、加载与启动”,已经可以成功boot linux kernel并点亮LED了。基于此,我们可以展开第四个任务:启动Linux kernel到命令行(验收标准相当直接,不多说了)。完成该任务的基本步骤包括:

  • init/main.c中,增加一个简单的点LED的函数,以便用于最初的debug

  • 为了方便后续的开发,尽早实现kernel的串口打印功能

  • 完善dts文件,增加memory有关的信息,以便kernel可以正确初始化memory

  • debug IRQ、Timer有关的功能

  • debug其它功能,使kernel可以正确完成初始化过程

  • 制作一个ramdisk,作为临时的rootfs,并启动至命令行

2. 涉及的知识点

该任务主要涉及如下知识点:

  • Linux kernel early console功能

  • Linux kernel串口子系统

  • Linux kernel memory、IRQ、Timer等基础功能的移植

  • Linux kernel的初始化流程,包括start_kernel、reset_init等

  • ramdisk、rootfs有关的知识

3. 完成任务的思路

该任务可以拆分为几个独立的部分:

  1. 将Linux kernel启动流程拆分为较为独立的功能,并完成一系列的分析文档(估计是一个漫长的过程)

  2. 为linux kernel early console功能写两篇文章,一篇是功能分析,一篇是移植说明

  3. 为linux kernel memory、IRQ、Timer等模块,分别写一篇文章,说明移植过程,并穿插有关的device tree知识

  4. 着手进行Linux kernel串口子系统的分析,会产出多篇文章,包括serial、TTY、console等等

  5. 写一篇文章,介绍基于ramdisk的rootfs的制作过程

  6. 其它等等,欢迎大家补充

最后,还是老话,感兴趣的同学可以认领任务 big_smile

4. 任务总结

到目前为止(2016/12/06),该任务在bubblegum 96boards上基本完成,共有如下的文档产出:

  1. X-012-KERNEL-serial early console的移植

  2. X-013-UBOOT-使能autoboot功能

  3. X-014-KERNEL-ARM GIC driver的移植

  4. X-015-KERNEL-ARM generic timer driver的移植

  5. X-016-KERNEL-串口驱动开发之驱动框架

  6. X-017-KERNEL-串口驱动开发之uart driver框架

  7. X-018-KERNEL-串口驱动开发之serial console

  8. X-019-KERNEL-串口驱动开发之数据收发

  9. X-020-ROOTFS-initramfs的制作和测试

  10. X-021-ROOTFS-基于busybox的最简rootfs的制作

可以通过如下步骤在板子上验证:
1)代码下载(具体可参考“X-003-UBOOT-基于Bubblegum-96平台的u-boot移植说明”)

mkidr -p ~/work/xprj
cd ~/work/xprj
git clone https://github.com/wowotechX/build
git clone https://github.com/wowotechX/u-boot
git clone https://github.com/wowotechX/tools
git clone https://github.com/wowotechX/linux
git clone https://github.com/wowotechX/doc    #包含有说明文档

2)代码编译

cd build
make env_prepare   #下载交叉编译工具,只需要执行一次,之前任务有下载过的,请忽略该步骤
make libusb         #只需要执行一次
make dfu             #只需要执行一次
make uboot kernel busybox initramfs uImage

3)按住Bubblegum-96的ADFU键,使板子进入DFU模式
4)按住Bubblegum-96的ADFU键不松开,将splboot.bin(就是我们的SPL image)下载到SRAM并执行

cd ./build
make spl-run    #这是一个快捷命令

5)执行完毕后,会重新进入DFU模式,进入后,可以松开ADFU按键。
6)连接好串口,将包含Kernel Image、dtb文件以及initramfs的FIT uImage下载DDR并执行

cd ./build
make kernel-run    #这是一个快捷命令

7)执行成功后,可以在串口控制台上看到u-boot、kernel的启动日志,最终会运行到busybox的命令行中。

离线

#2 2016-09-12 10:59:13

ooonebook
会员
注册时间: 2016-04-29
帖子: 36

Re: 【任务4】启动Linux kernel到命令行

“为linux kernel early console功能写两篇文章,一篇是功能分析,一篇是移植说明”
这个任务我认领了~early debug包括printascii、early_print、printk几个输出函数,就都在这篇里面说明了~
另外,early_console也是基于console的基础上,会和第4个任务有一点冲突。

“写一篇文章,介绍基于ramdisk的rootfs的制作过程”
这个任务我也认领了~ big_smile

离线

#3 2016-09-12 11:14:09

wowo
管理员
注册时间: 2016-04-18
帖子: 196

Re: 【任务4】启动Linux kernel到命令行

ooonebook 说:

“为linux kernel early console功能写两篇文章,一篇是功能分析,一篇是移植说明”
这个任务我认领了~early debug包括printascii、early_print、printk几个输出函数,就都在这篇里面说明了~
另外,early_console也是基于console的基础上,会和第4个任务有一点冲突。

“写一篇文章,介绍基于ramdisk的rootfs的制作过程”
这个任务我也认领了~ big_smile

多谢认领~~
对于early debug,建议不要使用printascii这些老古董了(因为arm64平台已经没有了)。
early_console应该可以搞定,你去我们的代码里面,查一下OF_EARLYCON_DECLARE,注册一个查询方式的uart tx函数即可,可以和u-boot中的console复用。
确实会和第4个任务有一点冲突,不过在early console里面,不会涉及console的任何知识的,因为刚刚启动,目的很直接:串口能够打印。

early console的任务:“为linux kernel early console功能写两篇文章,一篇是功能分析,一篇是移植说明”,我们一起做吧,功能分析我来,移植以及移植说明你来:-)

离线

#4 2016-09-12 11:14:42

wowo
管理员
注册时间: 2016-04-18
帖子: 196

Re: 【任务4】启动Linux kernel到命令行

wowo 说:
ooonebook 说:

“为linux kernel early console功能写两篇文章,一篇是功能分析,一篇是移植说明”
这个任务我认领了~early debug包括printascii、early_print、printk几个输出函数,就都在这篇里面说明了~
另外,early_console也是基于console的基础上,会和第4个任务有一点冲突。

“写一篇文章,介绍基于ramdisk的rootfs的制作过程”
这个任务我也认领了~ big_smile

多谢认领~~
对于early debug,建议不要使用printascii这些老古董了(因为arm64平台已经没有了)。
early_console应该可以搞定,你去我们的代码里面,查一下OF_EARLYCON_DECLARE,注册一个查询方式的uart tx函数即可,可以和u-boot中的console复用。
确实会和第4个任务有一点冲突,不过在early console里面,不会涉及console的任何知识的,因为刚刚启动,目的很直接:串口能够打印。

early console的任务:“为linux kernel early console功能写两篇文章,一篇是功能分析,一篇是移植说明”,我们一起做吧,功能分析我来,移植以及移植说明你来:-)

当然,在console能用之前,只有点LED了,哈哈~~~

离线

#5 2016-09-12 15:53:01

ooonebook
会员
注册时间: 2016-04-29
帖子: 36

Re: 【任务4】启动Linux kernel到命令行

wowo 说:
ooonebook 说:

“为linux kernel early console功能写两篇文章,一篇是功能分析,一篇是移植说明”
这个任务我认领了~early debug包括printascii、early_print、printk几个输出函数,就都在这篇里面说明了~
另外,early_console也是基于console的基础上,会和第4个任务有一点冲突。

“写一篇文章,介绍基于ramdisk的rootfs的制作过程”
这个任务我也认领了~ big_smile

多谢认领~~
对于early debug,建议不要使用printascii这些老古董了(因为arm64平台已经没有了)。
early_console应该可以搞定,你去我们的代码里面,查一下OF_EARLYCON_DECLARE,注册一个查询方式的uart tx函数即可,可以和u-boot中的console复用。
确实会和第4个任务有一点冲突,不过在early console里面,不会涉及console的任何知识的,因为刚刚启动,目的很直接:串口能够打印。

early console的任务:“为linux kernel early console功能写两篇文章,一篇是功能分析,一篇是移植说明”,我们一起做吧,功能分析我来,移植以及移植说明你来:-)

嗯,是我搞错了,还停留在earlyprintk的年代,还整理了一篇earlyprintk的文档,经你这么一说才发现kernel出了个earlycon的东西,难怪我说arm64下找不到early_printk.c这个文件。
s5pv210上默认也是使用earlyprintk的。不知道arm平台上能不能用,回头改成earlycon方式试一下看。要好好研究下。谢谢wowo~

离线

#6 2016-09-25 22:46:45

ooonebook
会员
注册时间: 2016-04-29
帖子: 36

Re: 【任务4】启动Linux kernel到命令行

hi,wowo,关于early_printk和earlycon整理了两篇文章,传到博客上去了
http://blog.csdn.net/ooonebook/article/details/52654120
http://blog.csdn.net/ooonebook/article/details/52654191
有空的话还麻烦帮忙看一下,指导一下,谢谢~ smile

离线

#7 2016-09-26 11:37:51

linuxer
版主
注册时间: 2016-04-18
帖子: 69

Re: 【任务4】启动Linux kernel到命令行

我认领任务3好了,分析一下启动阶段memory、IRQ和timer相关的内容。

离线

#8 2016-09-26 14:03:52

wowo
管理员
注册时间: 2016-04-18
帖子: 196

Re: 【任务4】启动Linux kernel到命令行

ooonebook 说:

hi,wowo,关于early_printk和earlycon整理了两篇文章,传到博客上去了
http://blog.csdn.net/ooonebook/article/details/52654120
http://blog.csdn.net/ooonebook/article/details/52654191
有空的话还麻烦帮忙看一下,指导一下,谢谢~ smile

好的,话说你的效率真是高啊。赞~~

离线

#9 2016-09-26 14:04:07

wowo
管理员
注册时间: 2016-04-18
帖子: 196

Re: 【任务4】启动Linux kernel到命令行

linuxer 说:

我认领任务3好了,分析一下启动阶段memory、IRQ和timer相关的内容。

欢迎~~~

离线

页脚