红联Linux门户
Linux帮助

ubuntu 16.10文件系统和内核制作

发布时间:2016-11-27 10:55:14来源:天马行空,隐姓埋名作者:Aut. wmy
前言:
Board:rk3288,纯净linux内核。不能从android源代码里面把kernel单独抠出来,那样会无法启动ubuntu文件系统。本文参考rk官网和firefly论坛相关文章。
 
一、内核镜像制作
1.linux-boot.img。
内核编译会生成zImage和resource.img这两个关键的文件,有两种打包方式,主要和分区文件参数相关:1.zImage和initrd.img打包成linux-boot.img烧到boot分区,resource.img单独烧到一个分区;2.zImage、initrd.img、resource.img合起来打包成linux-boot.img烧到boot分区。
1)第一种方式,zImage由内核编译生成,initrd.img是引导内核的一个分区,是开源的,可以用以下方式获得并编译:
git clone https://github.com/TeeFirefly/initrd.gitmake
-C initrd
编译之后会生成initrd.img,用:
mkbootimg --ramdisk initrd.img --kernel zImage -o linux-boot.img 可以生成目标镜像,mkbootimg可以去搜索下载安装。当然还有一种办法获得initrd.img,解包现有的initrd.img:
unmkbootimg --kernel zImage --ramdisk initrd.img -i linux-boot.img 解包后的文件在当前目录下。
2)第二种方式,与一不同的就是打包方式多了一个参数:
mkbootimg --kernel zImage --ramdisk initrd.img --second resource.img -o linux-boot.img
当然对应的解包方式也一样了。
建议用第二种方式。
 
二、文件系统制作
1、先从官方上获取ubuntu core的tar包:
http://cdimage.ubuntu.com/ubuntu-base/releases/16.10/release/
ubuntu 16.10文件系统和内核制作
可以从上面地址中选择合适的镜像包下载,比如适合rk3288的板子:ubuntu-base-16.10-base-armhf.tar.gz(下载地址:http://cdimage.ubuntu.com/ubuntu-base/releases/16.10/release/ubuntu-base-16.10-base-armhf.tar.gz) 
也可以用命令下载到本地:
wget -p rootfs http://cdimage.ubuntu.com/ubuntu-base/releases/16.10/release/ubuntu-base-16.10-base-armhf.tar.gz
2.开始客制化文件系统
在上面下载的tar包的当前路径下:比如rootfs文件夹
mkdir ubuntu
tar -xpzf ubuntu-base-16.10-base-armhf.tar.gz -C ubuntu/
解压完毕后,安装虚拟启动器,模拟启动这个ubuntu文件系统:
apt-get install qemu-user-static
cp /usr/bin/qemu-arm-static ubuntu/usr/bin/
拷贝PC主机端的dns配置,因为待会安装程序时要用网络:
sudo cp -b /etc/resolv.conf  ubuntu/etc/resolv.conf
增加软件源:
sudo vim etc/apt/source.list
加入如下两行内容,保存后退出:
deb http://ports.ubuntu.com/ubuntu-ports/ xenial main universe
deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial main universe
经过上述步骤,已经对ubuntu根文件系统做了简单的配置,现在可以用工具切换到此根文件系统了。
为了简化操作过程,这里使用一个切换根文件系统的脚本,如下所示:
#!/bin/bash  
functionmnt() {  
echo"MOUNTING"  
sudomount-t proc /proc${2}proc  
sudomount-t sysfs /sys${2}sys  
sudomount-o bind /dev${2}dev  
sudochroot ${2}  
}  
functionumnt() {  
echo"UNMOUNTING"  
sudoumount${2}proc  
sudoumount${2}sys  
sudoumount${2}dev  
}  
if[ "$1"== "-m"] && [ -n "$2"] ;  
then  
mnt $1 $2  
elif[ "$1"== "-u"] && [ -n "$2"];  
then  
umnt $1 $2  
else  
echo""  
echo"Either 1'st, 2'nd or both parameters were missing"  
echo""  
echo"1'st parameter can be one of these: -m(mount) OR -u(umount)"  
echo"2'nd parameter is the full path of rootfs directory(with trailing '/')"  
echo""  
echo"For example: ch-mount -m /media/sdcard/"  
echo""  
echo1st parameter : ${1}  
echo2nd parameter : ${2}  
fi
在rootfs目录下创建mount.sh文件,并将上面内容复制到文件中:
chmod +x ch-mount.sh
./mount.sh -m ubuntu/
这个时候会切换到模拟启动的ubuntu文件系统下
这个时候就可以对文件系统进行客制化了。
先更新源:
apt-get update
先装个ipconfig命令:
apt-get install net-tools
用ifconfig 查看下网络情况,发现ip地址和ubuntu主机地址一样。
开始安装一些常用工具,还有xserver,用来启动ubuntu桌面环境。
apt-get install git vim openssh-server
需要一段时间,可以去做做其他事。
接着开始安装桌面环境,这里选择安装xubuntu桌面,比较炫酷一点:
apt-get install ubuntu-session
apt-get install xubuntu-desktop
需要很长时间。
全部安装完之后,添加一个用户ubuntu,并设置密码:
useradd -s '/bin/bash' -m -G adm,sudo ubuntu
修改ubuntu用户密码,回车后按提示输入两次密码:
passwd ubuntu
修改root帐号的密码,回车后按提示输入两次密码:
passwd root
配置网络使其开机就能联网:
echo auto eth0 > /etc/network/interfaces.d/eth0 echo iface eth0 inet dhcp >> /etc/network/interfaces.d/eth0
文件系统安装到此为止,但需要做一些配置使其能够起来,修改~/.profile文件:
打开文件后找到“mesg n”,
将其更改为“tty -s && mesg n”。
这个意思是开机后直接以root身份登录桌面系统。
文件系统制作完毕,如果想修改桌面或者加入一些其他的开源库sdk,可以继续对其改造。
exit命令推出模拟文件系统。
./mount.sh -u ubuntu/ 卸载文件系统
接下来开始打包镜像:
dd if=/dev/zero of=ubuntu.img bs=1M count=4000
sudo mkfs.ext4 ubuntu.img
mkdir ubuntu-mount
sudo mount ubuntu.img ubuntu-mount
sudo cp -rfp ubuntu ubuntu-mount
sudo umount ubuntu-mount
e2fsck -p -f ubuntu.img
resize2fs -M ubuntu.img
以上生成ubuntu.img就是16.10的根文件系统,烧录到linuxroot分区后,系统起来后需要执行一个命令:
resize2fs /dev/block/mtd/by-name/linuxroot
扩展真实的内存空间,也可以把这个命令写到开机启动脚本,烧机完第一次启动需要输入,下次就不需要了。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/26374.html