虽然这个系列主要是Linux内核移植的笔记,但是从第(7)到第(31)全部写的是U-Boot的内容。
这些有关U-Boot的内容本来应该放在之前的《U-Boot for AM335x》系列里面,但是因为《U-Boot for AM335x》系列已经结束了,而移植Linux内核时调试硬件,U-Boot起的作用又非常大,因此还是放在了本系列中。
Anyway,since现在硬件调试已经告一段落,接下来就是正式的Linux Kernel移植了。
Note: 其实硬件还差LCD的触摸板和RS485没有用U-Boot调通,但是由于U-Boot的代码里面没有包含ADC驱动程序,而RS485功能并不复杂,所以这两个留到Linux Kernel移植的时候调试。
Note: 由于在调试阶段Linux Kernel需要经常修改,因此还是采用从SD卡启动U-Boot,再通过U-Boot的tftp功能将Kernel放置在SDRAM中;另外,文件系统暂时先采用Forlinx光盘中编译好的镜像,它某些文件的版本号可能和这里的kernel mainline有区别,但是影响不大,后期再制作新的文件系统。
《U-Boot for AM335x》的第13篇,记录的就是编译Linux Kernel的基本步骤,由于kernel会有更新,所以按照之前的步骤再疏理一遍:
Step 1: 使用create-sdcard.sh制作SD卡:
./create-sdcard.sh
Step 2: 将文件系统解压到SD卡的rootf:
tar xvf rootfs.tar.bz2 -C /media/rootfs
Step 3: 下载Kernel的源代码并解压:
(https://www.kernel.org)
tar xvf linux-3.18.4.tar.xz
Step 4: 下载交叉编译器并解压:
(http://software-dl.ti.com/sitara_linux/esd/AM335xSDK/latest/index_FDS.html)
tar xvf gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux.tar.bz2 -C /opt
Step 5:
make ARCH=arm CROSS_COMPILE=/opt/gcc-linaro-arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -j8 mrproper
make ARCH=arm CROSS_COMPILE=/opt/gcc-linaro-arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -j8 omap2plus_defconfig
General Setup -> Default hostname (MARIA)
Boot options -> Kernel command line type (root=/dev/mmcblk0p2 rootwait console=ttyO0,115200)
make ARCH=arm CROSS_COMPILE=/opt/gcc-linaro-arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -j8 am335x-bone.dtb
make ARCH=arm CROSS_COMPILE=/opt/gcc-linaro-arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -j8 LOADADDR=0x80008000 uImage
Step 6:
cp arch/arm/boot/dts/am335x-bone.dtb arch/arm/boot/uImage /tftp_root/
Step 7:
U-Boot# set ipaddr 192.168.1.117; set serverip 192.168.1.116
U-Boot# tftp 0x83000000 am335x-bone.dtb
U-Boot# tftp 0x82000000 uImage
U-Boot# bootm 0x82000000 - 0x83000000
注意上面的make命令中LOADADDR和下面的uImage存放位置的区别,前者是内核解压之后的地址,后者是内核镜像的地址,它们不是一个概念。
之后就会发现内核解压之后的串口信息啦:
U-Boot# bootm 0x82000000 - 0x83000000
## Booting kernel from Legacy Image at 82000000 ...
Image Name: Linux-3.18.4
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 4584480 Bytes = 4.4 MiB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum ... OK
## Flattened Device Tree blob at 83000000
Booting using the fdt blob at 0x83000000
Loading Kernel Image ... OK
Using Device Tree in place at 83000000, end 8300a0e1
Starting kernel ...
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 3.18.4 (maria@localhost.localdomain) (gcc version 4.7.3 2013025
[ 0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c5387d
[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[ 0.000000] Machine model: TI AM335x BeagleBone
默认的mainline可以驱动大部分的设备,但并不是所有的,为了porting到自己的板子,需要修改dts文件,以及制作相应的驱动程序。
下一节是如何编译自己的dts文件。
文章评论(0条评论)
登录后参与讨论