【任务4】启动Linux kernel到命令行
本文是原「蜗窝讨论区」的历史存档(2016-09-10),来自版块「X Project」,共 9 帖。讨论区已停止服务,此处仅供查阅。
任务说明 通过“【任务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,并启动至命令行[/*]
涉及的知识点 该任务主要涉及如下知识点:
Linux kernel early console功能[/*]
Linux kernel串口子系统[/*]
Linux kernel memory、IRQ、Timer等基础功能的移植[/*]
Linux kernel的初始化流程,包括start_kernel、reset_init等[/*]
ramdisk、rootfs有关的知识[/*]
完成任务的思路 该任务可以拆分为几个独立的部分:
将Linux kernel启动流程拆分为较为独立的功能,并完成一系列的分析文档(估计是一个漫长的过程)[/*]
为linux kernel early console功能写两篇文章,一篇是功能分析,一篇是移植说明[/*]
为linux kernel memory、IRQ、Timer等模块,分别写一篇文章,说明移植过程,并穿插有关的device tree知识[/*]
着手进行Linux kernel串口子系统的分析,会产出多篇文章,包括serial、TTY、console等等[/*]
写一篇文章,介绍基于ramdisk的rootfs的制作过程[/*]
其它等等,欢迎大家补充[/*]
最后,还是老话,感兴趣的同学可以认领任务
任务总结 到目前为止(2016/12/06),该任务在bubblegum 96boards上基本完成,共有如下的文档产出:
可以通过如下步骤在板子上验证: 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的命令行中。
“为linux kernel early console功能写两篇文章,一篇是功能分析,一篇是移植说明” 这个任务我认领了~early debug包括printascii、early_print、printk几个输出函数,就都在这篇里面说明了~ 另外,early_console也是基于console的基础上,会和第4个任务有一点冲突。
“写一篇文章,介绍基于ramdisk的rootfs的制作过程” 这个任务我也认领了~
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 写道:
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了,哈哈~~~
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~
hi,wowo,关于early_printk和earlycon整理了两篇文章,传到博客上去了 http://blog.csdn.net/ooonebook/article/details/52654120 http://blog.csdn.net/ooonebook/article/details/52654191 有空的话还麻烦帮忙看一下,指导一下,谢谢~
我认领任务3好了,分析一下启动阶段memory、IRQ和timer相关的内容。
ooonebook 写道: hi,wowo,关于early_printk和earlycon整理了两篇文章,传到博客上去了 http://blog.csdn.net/ooonebook/article/details/52654120 http://blog.csdn.net/ooonebook/article/details/52654191 有空的话还麻烦帮忙看一下,指导一下,谢谢~
好的,话说你的效率真是高啊。赞~~
linuxer 写道: 我认领任务3好了,分析一下启动阶段memory、IRQ和timer相关的内容。
欢迎~~~
