蜗窝科技

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

蜗窝讨论区存档 · X Project · 楼主 wowo · 2016-09-10 · 9 帖

本文是原「蜗窝讨论区」的历史存档(2016-09-10),来自版块「X Project」,共 9 帖。讨论区已停止服务,此处仅供查阅。

wowo · 2016-09-10 21:49

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

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

  3. 为了方便后续的开发,尽早实现kernel的串口打印功能[/*]

  4. 完善dts文件,增加memory有关的信息,以便kernel可以正确初始化memory[/*]

  5. debug IRQ、Timer有关的功能[/*]

  6. debug其它功能,使kernel可以正确完成初始化过程[/*]

  7. 制作一个ramdisk,作为临时的rootfs,并启动至命令行[/*]

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

  9. Linux kernel early console功能[/*]

  10. Linux kernel串口子系统[/*]

  11. Linux kernel memory、IRQ、Timer等基础功能的移植[/*]

  12. Linux kernel的初始化流程,包括start_kernel、reset_init等[/*]

  13. ramdisk、rootfs有关的知识[/*]

  14. 完成任务的思路 该任务可以拆分为几个独立的部分:

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

  16. 为linux kernel early console功能写两篇文章,一篇是功能分析,一篇是移植说明[/*]

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

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

  19. 写一篇文章,介绍基于ramdisk的rootfs的制作过程[/*]

  20. 其它等等,欢迎大家补充[/*]

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

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

  2. X-012-KERNEL-serial early console的移植[/*]

  3. X-013-UBOOT-使能autoboot功能[/*]

  4. X-014-KERNEL-ARM GIC driver的移植[/*]

  5. X-015-KERNEL-ARM generic timer driver的移植[/*]

  6. X-016-KERNEL-串口驱动开发之驱动框架[/*]

  7. X-017-KERNEL-串口驱动开发之uart driver框架[/*]

  8. X-018-KERNEL-串口驱动开发之serial console[/*]

  9. X-019-KERNEL-串口驱动开发之数据收发[/*]

  10. X-020-ROOTFS-initramfs的制作和测试[/*]

  11. X-021-ROOTFS-基于busybox的最简rootfs的制作[/*]

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


[== Undefined ==]
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)代码编译


[== Undefined ==]
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并执行


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

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


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

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

ooonebook · 2016-09-12 10:59

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

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

wowo · 2016-09-12 11:14

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

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

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

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

wowo · 2016-09-12 11:14

wowo 写道:

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

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

多谢认领~~ 对于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了,哈哈~~~

ooonebook · 2016-09-12 15:53

wowo 写道:

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

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

多谢认领~~ 对于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~

ooonebook · 2016-09-25 22:46

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

linuxer · 2016-09-26 11:37

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

wowo · 2016-09-26 14:03

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

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

wowo · 2016-09-26 14:04

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

欢迎~~~