本手册适用于九鼎的RK3288开发板。我的操作系统是ubuntu14.04 x64和win7x64。
1.设置开发环境
我们需要arm-eabi-gcc编译内核,解压网盘中的x3288v4的源码包,里面有编译的交叉编译器和Linux3.10源码。主要安装mkbooting工具。 2.安装mkbooting $cd rockchip-mkbootimg $make && sudo make install 3.编译内核 源码包中含有编译内核的脚本mk $./mk –us 如果没有错误,会生成zImage、kernel.img、resource.img,至于脚本生成的其他东西不用管,我们只需要zImage和resource.img自行阅读脚本。 4. 构建initrd
1> 下载源代码
$ git clone https://github.com/TeeFirefly/initrd.git
2> 更改为分支for- kernel_4.4
$ git checkout for-kernel_4.4
3> 建立在initrd 根目录的父目录下。
$ make -C initrd
4> 如果没有错误,将生成initrd.img 。
4. 将zImage 、resource.img 、initrd.img 包装到linux-root.img 中
$ mkbootimg --kernel kernel/arch/arm/boot/zImage --ramdisk initrd.img --second kernel/resource.img -o linux -boot.img
现在,linux-boot.img 没问题,它将在步骤6 中使用。
5. 制作ubuntu16.04 的rootfs
1> 首先,请下载ubuntu 的最低内核
$ wget –c http://cdimage.ubuntu.com/ubuntu ... 4-core-armhf.tar.gz
2> 解压缩
$ mkdir linux-rootfs
$ sudo tar -xpf ubuntu-base -16.04-core-armhf.tar.gz -C linux-rootfs
3> 安装模拟器运行根文件系统
$ sudo apt-get install qemu-user-static
$ sudo cp / usr / bin / qemu-arm-static linux-rootfs /usr/bin/
4> 将本地主机的DNS 配置复制到rootfs
$ sudo cp -b /etc/resolv.conf linux-rootfs /etc/resolv.conf
5> 添加额外的端口ubuntu 的来源,把linux-rootfs/etc/apt/sources.list 备份
修改sources.list 内容:deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe
6>使用安装脚本文件来安装核心文件系统。请参阅文件ch-mount.sh,并添加可执行权限。
$ sudo chmod a+x ch-mount.sh
7>挂载rootfs,注意不要以管理员身份执行脚本,否则会发生错误。
$ ./ch-mount.sh -m linux-rootfs/
现在,您将以root身份进入ubuntu16.04 rootfs,并运行模拟bash,您可以安装任何要整合的软件包。先apt-get update更新下载源。 a) 由于PC端的ubuntu的字符是zh_CN.UTF-8,所以先安装中文编码 #locale-gen zh_CN.UTF-8 b) 安装网络工具以使ifconfig命令正常工作。 #apt-get install net-tools ping c) 安装一些基本工具 #apt-get install vim openssh-server d) 安装桌面环境 #apt-get install ubuntu-session lubuntu-desktop e) 启用自动连接网络 #echo auto eth0> /etc/network/interfaces.d/eth0 #echo iface eth0 inet dhcp >> /etc/network/interfaces.d/eth0 f) 安装启动桌面 #update-alternatives --config x-session-manager
选择:
desktop | x-session
---------------------
xubuntu | startxfce4
---------------------
lubuntu | startlxde g) 设置默认登录屏幕 #dpkg-reconfigure lightdm h) 设置用户名和密码登录 #useradd -s '/bin/bash' -m -G adm,sudo Ubuntu #passwd ubuntu
#passwd root i) 退出模拟bash #exit 文件系统的基本安装已完成,可以根据自己需要进行客制化,下面是制作完成后烧入到板子上可能出现的问题 a) 系统启动不了 Ubuntu16.04开机启动脚本有所改变,由systemd 来控制,所以现在要激活一个服务: #vim /lib/systemd/system/rc-local.service 在文件末尾加上:
[Install]
WantedBy=multi-user.target
表示开机会启动。 #ln -fs /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service b) ttyS2启动失败 ubuntu16.04是用systemd的,可以这样做: #cp /lib/systemd/system/serial-getty@.service /lib/systemd/system/serial-getty@ttyS2.service #ln -s /lib/systemd/system/serial-getty@ttyS2.service /etc/systemd/system/getty.target.wants/ 再修改/lib/systemd/system/serial-getty@ttyS2.service把里面的“dev-%i.device”改为“%i” c) emmc内存未分配 #vi /etc/rc.local 在exit 0前添加/usr/local/bin/mtd-by-name.sh、/usr/local/bin/first-boot-recovery.sh两个启动脚本,给予可执行权限,用来挂载emmc, 8>在rootfs中安装后,请卸载rootfs:
$./ch- mount.sh -u linux-rootfs/
9>创建一个空映像磁盘来保存rootfs
$ dd if = / dev / zero of = linux-rootfs.img bs = 1M count = 4096
$ sudo mkfs.ext4 -F -L linuxroot linux -rootfs.img
10>挂载镜像磁盘,并将rootfs复制到它
$ mkdir mnt
$ sudo mount linux-rootfs.img mnt
$ sudo cp -rfp linux-rootfs / * mnt /
11>卸载映像磁盘并调整其大小。
$ sudo umount mnt
$ / sbin / e2fsck -p -f linux-rootfs.img
$ / sbin / resize2fs -M linux-rootfs.img
12>现在,rootfs完成了。linux-rootfs.img将在步骤6中使用。
6.制作一个更新包。(以下操作都是在win7上进行)
1>我们需要刚刚创建的linux-boot.img和linux-rootfs.img。以及将它们烧入到电路板上的工具RKTools: https://pan.baidu.com/s/1157KL6vQ9GopGbififYJKQ 8ur1
2>将linux-boot.img和linux-rootfs.img复制到rockdev / Image目录。
3>对Image目录下的package-file和parameter文件进行一些修改(我已经修改过了,不用修改了),然后运行mkupdate
4>现在,update.img将在rockdev目录下生成。
7. Flash update.img到电路板。
按照RKTools2使用文档进行烧入操作
|