Firefly Ubuntu开发入门之(2)运行内核

本帖最后由 牛头 于 2016-9-24 15:18 编辑

 很多朋友希望在拿到Firelfy发布的Ubuntu镜像后,会想自己加驱动或自己编译的内核等等,但做的过程中难免出现各种各样的问题。网上各种教程都不那么切题,讲解都不是那么细致,让人感到迷茫,又或许是无助。Firefly团队努力地在帮助开发者打破此困局,整理策划了系列教程,让开发者可以通过Firefly开源平台可以快速上手开发,并快速打造出成熟产品。

“[b]创新 开源 分享 定制[/b]”是我们的口号,我们一直在努力。

上一篇文章说到如何把kernel及modules编译出来,今天继续讲如何让kernel在板子上飞~~告别各种不进系统桌面、串口不输出LOG等问题!

那么请跟着我的脚步上路吧!

一、准备初始RAM磁盘

初始RAM磁盘(initrd)是在实际根文件系统可用之前挂载到系统中的一个初始根文件系统。initrd与内核绑定在一起,并作为内核引导过程的一部分进行加载。

内核会将这个initrd文件作为其两阶段引导过程的一部分来加载模块,这样才能稍后使用真正的文件系统,并挂载实际的根文件系统。initrd中包含了实现这个目标所需要的目录和可执行程序的最小集合,例如将内核模块加载到内核中所使用的 insmod工具。

在桌面或服务器Linux系统中,initrd是一个临时的文件系统。其生存周期很短,只会用作到真实文件系统的一个桥梁。

 Firefly团队为方便开发者进行项目,在github上创建initrd的仓库,开发者可以直接clone使用。

cd ~/UbuntuDev/

git clone [b][u]https://github.com/TeeFirefly/initrd.git[/u][/b]

make -C initrd

有兴趣深入去了解initrd的朋友,也可以自行去研究。

二、打包内核和RAM磁盘

Firefly官方发布的Ubuntu系统都是只有boot分区的,所以要将 kernel 和 initrd 打包成 boot.img,在烧录到指定分区才能上kernel飞~~

这里实际操作的方式和上篇讲的稍微有些区别,生成boot镜像用到了一个新工具mkbootimg,大家可通过mkbootimg.tar.gz (12.5 KB)附件下载,放至kernel根目录。生成镜像的命令如下,记得给mkbootimg增加可执行属性:

cd ~/UbuntuDev/firefly-3.14-kernel/

./mkbootimg --kernel arch/arm/boot/zImage --ramdisk ../initrd.img --second resource.img -o boot.img

这里的[b]resource.img[/b]可以由[b]make -j8 firefly-rk3288.img[/b]得到[b]。[/b]

至于boot分区、kernel分区、boot镜像带不带kernel等情况,在此就先挖个坑,改天再来填坑。

三、确认parameter文件

Linux 的根文件系统(RFS)可能在不同的分区或存储设备上(eMMC、TF 卡或 U 盘),所以需要在内核的参数CMDLINE中指定。如何修改内核CMDLINE参数?在parameter文件中修改CMDLINE行即可。为什么要提到这个parameter文件?烧录boot.img在开发板时,烧录工具里需要用到此文件。

在板子启动时,内核会打印CMDLINE参数,可以用以确认板子的分区等信息。更新boot分区时,要按板子里原本的CMDLINE参数,去更新分区,才不会造成异常。另外,请确认控制台串口的设备节点,没配置对的话,串口没有LOG输出。

建议通过串口调试工具直接拷贝log中的CMDLINE行参数,保存到parameter文件中在烧录,简单粗暴有效

附件中有我实验用到的parameter文件,可以用于验证。[parameter.rar|attachment](upload://apChddkfqiTqf4mlxZMQbNACgVT.rar) (467 Bytes)

四、烧录boot.img

在AndroidTool的Download Image页面,boot栏选择编译后的boot.img进行烧录。烧录前要确认好boot分区的Address,烧录后可以通过log确认kernel是否更新成功。

 新编译的kernel已经在开发板上跑起来啦,心情还是有点激动,过程中不知道踩了多少坑。可以自由修改内核了,增加驱动什么的都不是问题了。

沙发

老大,parameter 文件怎么下载不了,提示我特定用户才可以下载,能不能处理一下

看看这里能不能下载
mkbootimg.tar.gz (12.5 KB)
parameter.rar (467 Bytes)

感谢,已经可以下载

parameter 文件怎么下载不了,提示我特定用户才可以下载,能不能处理一下

我的能下载了,我把内容贴出来,你保存成parameter.txt即可

FIRMWARE_VER:5.0.0
MACHINE_MODEL:rk3288
MACHINE_ID:007
MANUFACTURER:RK3288
MAGIC: 0x5041524B
ATAG: 0x60000800
MACHINE: 3288
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
#KERNEL_IMG: 0x62008000
#FDT_NAME: rk-kernel.dtb
#RECOVER_KEY: 1,1,0,20,0
CMDLINE:earlyprintk=ttyS2,115200 console=tty0 console=ttyS2,115200 androidboot.selinux=permissive androidboot.hardware=rk30board androidboot.console=ttyS2 root=/dev/mmcblk0p3 linuxroot rw rootfstype=ext4 init=/sbin/init initrd=0x62000000,0x00800000 mtdparts=rk29xxnand:0x00010000@0x00002000(boot),0x00002000@0x00012000(backup),-@0x00014000(linuxroot)

今天怎么没有继续更新啊

有个问题:

./mkbootimg --kernel arch/arm/boot/zImage --ramdisk ../initrd.img --second resource.img  -o boot.img

好像没有说明resource.img是从哪里来的?

csersoft 发表于 2016-9-23 22:27
有个问题:

好像没有说明resource.img是从哪里来的?

之前有个地方提到了,没重点突出{:4_158:}
make -j8 firefly-rk3288.img

本帖最后由 Angel CL 于 2016-10-14 01:08 编辑

lz:请问parameter文件在哪儿呢?按照你的讲解,之前步骤我都编译成功了,只是在第三步“确认parameter文件”中有点疑问,我的源码文件中没有parameter文件呢?如果跳过这一步,直接烧录boot.img之后开发板一直停留在写模式?这是因为parameter参数的原因还是其他原因呢?另外我想问一下编译出来的boot.img有多大呢?怎么我的只有8M左右,这正常吗?谢谢。

./mkbootimg --kernel arch/arm/boot/zImage --ramdisk ../initrd.img --second resource.img -o boot.img
这个请问要怎么写法?

#Boot ver: 2015-07-20#2.19
empty serial no.
checkKey
vbus = 0
board_fbt_key_pressed: ir_keycode = 0x0, frt = 0
no fuel gauge found
no fuel gauge found
read logo_on switch from dts [1]
can’t find power_ctr node for lcdc0
can’t find dts node for deviceinfo
rk_hdmi_register:fail to read deviceinfo
failed to find part:baseparamer
[EDID-EXTEND] It is a CEA 861 Series Extension.
no baseparametr,find best edid mode,vic=16
hdmi_dev->video.vic is 16
tmdsclk is 148500000
hsync_pol 1 vsync_pol 1
[HDMI] sucess output HDMI.
pll_src = 0, dclk_hz = 148500000, dclk_div = 4
failed to find part:logo
no fuel gauge found
checkKey
vbus = 0
board_fbt_key_pressed: ir_keycode = 0x0, frt = 0
Hit any key to stop autoboot: 0
boot/recovery image sha mismatch!
Unable to boot:boot
try to start recovery
failed to find part:recovery
‘recovery’ does not seem to be a partition nor an address
Unable to boot:recovery
try to start backup
failed to find part:kernel
ERROR: [rk_load_image_from_storage]: bootrk: bad boot or kernel image
Unable to boot:backup
try to start rockusb

冰天雪地360度跪求解决方法 为啥每次都是 sha mismatch! 呢?
无论我怎么刷都是这个结果。。

magic8421 发表于 2016-11-3 16:13
#Boot ver: 2015-07-20#2.19
empty serial no.
checkKey

刷之前是什么固件,后来刷什么固件有问题?

HI 你一开始说“上一篇文章说到如何把kernel及modules编译出来,今天继续讲如何让kernel在板子上飞~~告别各种不进系统桌面、串口不输出LOG等问题!” 我还是没看到modules在哪里有烧到板子中,第一篇中已经将modules都安装到modules_install/ 这,最终哪里用到它呢??

magic8421 发表于 2016-11-3 16:13
#Boot ver: 2015-07-20#2.19
empty serial no.
checkKey

固件或者parameter不对吧,检验不过。

执行烧录的时候,显示设备类型不匹配,停止执行。

magic8421 发表于 2016-11-3 16:13
#Boot ver: 2015-07-20#2.19
empty serial no.
checkKey

这个问题解决了吗?我也遇到了

你好,牛头,新手做内核编译和运行。遇到问题,求助。编译前内核是3.10.0 按照你的帖子做的,运行内核:DDR Version 1.00 20150318
In
SRX
Channel a: DDR3 200MHz
Bus Width=32 Col=10 Bank=8 Row=15 CS=2 Die Bus-Width=16 Size=2048MB
Channel b: DDR3 200MHz
Bus Width=32 Col=10 Bank=8 Row=15 CS=2 Die Bus-Width=16 Size=2048MB
OUT

U-Boot 2014.10-RK3288-10-g65679f1 (Jul 20 2015 - 10:28:11)

CPU: rk3288
CPU’s clock information:
arm pll = 600000000HZ
periph pll = 300000000HZ
ddr pll = 200000000HZ
codec pll = 594000000HZ
Board: Rockchip platform Board
DRAM: Found dram banks:1
Adding bank:0000000000000000(0000000100000000)
128 MiB
remotectl v0.1
storage init OK!
Using default environment

GetParam
check parameter success
no power key node
can’t find dts node for ricoh619
pmic:act8846
Can’t find dts node for fuel guage cw201x
SecureBootEn = 0, SecureBootLock = 0

#Boot ver: 2015-07-20#2.19
empty serial no.
checkKey
vbus = 1
board_fbt_key_pressed: ir_keycode = 0x0, frt = 0
no fuel gauge found
no fuel gauge found
read logo_on switch from dts [0]
no fuel gauge found
checkKey
vbus = 1
board_fbt_key_pressed: ir_keycode = 0x0, frt = 0
failed to find part:misc
misc partition not found!
Hit any key to stop autoboot: 0
boot/recovery image sha mismatch!
Unable to boot:boot
try to start recovery
failed to find part:recovery
‘recovery’ does not seem to be a partition nor an address
Unable to boot:recovery
try to start backup
failed to find part:backup
‘backup’ does not seem to be a partition nor an address
Unable to boot:backup
try to start rockusb
请问怎么解决呢?
BColorImageLinkQuoteCodeSmilies

你好,牛头,新手做内核编译和运行。遇到问题,求助。编译前内核是3.10.0 按照你的帖子做的,运行内核:DDR Version 1.00 20150318
In
SRX
Channel a: DDR3 200MHz
Bus Width=32 Col=10 Bank=8 Row=15 CS=2 Die Bus-Width=16 Size=2048MB
Channel b: DDR3 200MHz
Bus Width=32 Col=10 Bank=8 Row=15 CS=2 Die Bus-Width=16 Size=2048MB
OUT

U-Boot 2014.10-RK3288-10-g65679f1 (Jul 20 2015 - 10:28:11)

CPU: rk3288
CPU’s clock information:
arm pll = 600000000HZ
periph pll = 300000000HZ
ddr pll = 200000000HZ
codec pll = 594000000HZ
Board: Rockchip platform Board
DRAM: Found dram banks:1
Adding bank:0000000000000000(0000000100000000)
128 MiB
remotectl v0.1
storage init OK!
Using default environment

GetParam
check parameter success
no power key node
can’t find dts node for ricoh619
pmic:act8846
Can’t find dts node for fuel guage cw201x
SecureBootEn = 0, SecureBootLock = 0

#Boot ver: 2015-07-20#2.19
empty serial no.
checkKey
vbus = 1
board_fbt_key_pressed: ir_keycode = 0x0, frt = 0
no fuel gauge found
no fuel gauge found
read logo_on switch from dts [0]
no fuel gauge found
checkKey
vbus = 1
board_fbt_key_pressed: ir_keycode = 0x0, frt = 0
failed to find part:misc
misc partition not found!
Hit any key to stop autoboot: 0
boot/recovery image sha mismatch!
Unable to boot:boot
try to start recovery
failed to find part:recovery
‘recovery’ does not seem to be a partition nor an address
Unable to boot:recovery
try to start backup
failed to find part:backup
‘backup’ does not seem to be a partition nor an address
Unable to boot:backup
try to start rockusb
请问怎么解决呢?