为tinycolinux创建应用包-toolchain和编译方法

本文关键字:tinycorelinux编译gcc套件,live,vhd二合一colinux,tinycorelinux lnmp

在前面我们提到,一个linux发行包只要提供了核心部分和cui的基础toolchain部分才算是一个基本完整的linux发行包,因为扩展将来都由这套toolchain编译而来。在《为tinycolinux创建应用包》中我们用简单解压组合tcz的方式组建了一个lnmp环境包(mysql5.1+php5.3),在这里,我们准备为tinycolinux建立一个toolchain环境,并用源码编译的方式产生高版本的mysql+php的lnmp包,而这也是更通行和更灵活的办法。

关于编译新gcc套件及处理glibc移殖的问题

编译GCC可能面临二种需求环境:1) 从本地产生,比如你需要一个bootstrap的gcc低版本来产生高版本,2) 从外部crosscompile而来。

默认gcc第一遍只需要gmp,mpc,mpfr加gcc,这样–enable-language=c,c++编译出来的gcc支持stdlibc+±dev却不带libc-dev,甚至binutils都不需要,如果目标环境中没有支持是没有实用的。

完整可用的gcc套件要经过多遍,除了gcc,binutils,甚至还需要附加编译flex,bison这些,

最重要的问题来了:

默认gcc仅带libstdc++,这个可以后期添加新版本替换/叠加系统原有版本因为它是built into toolchain的,而glibc的版本是一个linux发行版rootfs中集成的built into rootfs,是最为基础的被引用部分,不可升级/替换,是一个不可移殖项。你需要另外准备平台依赖的libc-dev(glibc-dev),这可能需要在其它遍次pass,phase的gcc编译中完成。

其实GCC也算是一个类kernel的复杂包了,ng-crosstools有用类kernel的menuconfig方式产生.config环境。

以下测试过程全在硬盘版的tinycolinux下测试,live版的不方便。请下载tinycolinux live hd一体包后继续:

组建bootstrap toolchain

以下tcz默认全是4.x的,从4.x的compiletc.tcz的meta包的dep中提取而来,以下底部部分eglibc_base-dev就是glibc开发包,glibc runtime已经在tinycolinux的/lib中了,底部其它的那些是可选开发包,因为比较基础都保留了,gcc为461版本,请手动从某个镜像的4.x/tcz目录下载这些包到/mnt/cobd0/tce/optional,然后在console-nt中直接paste执行以下脚本。

sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/gmp.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/libmpc.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/mpfr.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/gcc.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/binutils.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/m4.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/make.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/pkg-config.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/bison.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/flex.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/gawk.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/grep.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/sed.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/patch.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/diffutils.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/findutils.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/file.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/eglibc_base-dev.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/gcc_base-dev.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/linux-3.0.1_api_headers.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/util-linux_base-dev.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/imlib2_base-dev.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/e2fsprogs_base-dev.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/fltk_base-dev.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/freetype_base-dev.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/jpeg_base-dev.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/libpng_base-dev.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/libsysfs_base-dev.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/zlib_base-dev.tcz

解压完毕后测试 gcc -v,g++ -v,可能你需要sudo reboot重启一次tinycolinux系统才能发现已安装但缺失包。

遵从以上谈到的编译gcc的难点,其实你完全可以用这套GCC461作bootstrap编译出新的GCC如gcc483 gcc491 etc…。以下我们用它测试编译新lnmp:

编译新lnmp

不可直接用lnmp.org的一键包,因为系统集成的工具扩展不一样,一般地,先编译mysql,再php,再nginx,这样php的–with-mysq=就可以引用到mysql的开发包了。以下包都跟上面一样下载来自4.x,整篇文章的tcz都来自4.x(注意cmake例外):

  1. mysql5.5
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/cmake
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/libidn.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/libiconv.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/ncurses-dev.tcz

5.5之后的mysql需要cmake。cmake.tcz是3.x的。4.x的cmake需要安装4.x的额外libstdc++,因此我舍弃4.x cmake选择了混合3.x的tcz。

ncurses nginx和mysql都需要(nginx需要运行库部分,mysql需要dev pkg部分)

mkdir b ; cd b ; cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DWITH_MYISAM_STORAGE_ENGINE=1 …

  1. php5.6
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/curl.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/curl-dev.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/libxml2.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/libxml2-bin.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/libxml2-dev.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/liblzma.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/libssh2.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/openssl-1.0.0.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/libpng.tcz

./configure --prefix=/usr/local/php --enable-fpm --enable-zip --enable-mbstring --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-zlib --with-gd --with-curl

(我们选取了能安装owncloud需要的那些包,mysql就不引用实际编译的5.5的包了用了src自带的mysqlnd)

  1. nginx1.11
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/pcre.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/pcre-dev.tcz
sudo unsquashfs -f -d / /mnt/cobd0/tce/optional/ncurses.tcz
./configure --prefix=/usr/local/nginx

以上编译过程中,如果解压发现不了实际已解压的引用包的,一般是一些含.so的包,需要sudo reboot重启一次guest系统

配置运行部分:

上面php和mysql显然没指定my.cnf和php.ini的目录,但它们默认分别都在/usr/local/mysql/和/usr/local/php/lib/php.ini,自己建2个即可,需要配置php.ini这二个文件,tz.php中才能显示smtp支持和控制php更多行为的那些选项如上传max upload size。

其实大多数可以参照《为tinycolinux创建应用包》中的做法,但还有一些附加处理部分:

mysql中新建一个tmp用来放mysql.sock,其权限要和data一样,都设为0755且归staff下的tc用户所有。这样mysql_install_db才能正确产生初始数据库+pid文件和mysqld_safe产生mysql.sock文件

启动的方法都可以在/opt/bootlocal.sh下加二条:

/usr/local/nginx/sbin/nginx ; /usr/local/php/sbin/php-fpm ; /usr/local/mysql/bin/mysqld_safe &


当然你还可能需要额外编译mta和redis这些,我发现网上chenall(grub4dos作者)有一个类似的tinycolinux的发行包,使用的是473。 它能把/home,/tce都挂载到本地share文件夹中,虽然权限不能继续,但在一定意义上,这是“共盘windows,linux”,这应该不是官方的支持的功能(vmlinux or initrd473),只是不知道怎么实现的。



(此处不设回复,扫码到微信留言,或直接点击到原文)

### 回答1: rv32-toolchain是一个特定的工具链,用于开发和编译RISC-V 32位架构的代码。RISC-V是一个开放的指令集架构,rv32表示该架构下的32位版本。 rv32-toolchain提供了一系列工具,用于将开发者编写的代码转换为可在RISC-V 32位系统上运行的机器码。这个工具含了编译器、汇编器、链接器和调试器等工具,使得开发者可以方便地编译、连接和调试他们的代码。 编译器是rv32-toolchain中最重要的组件之一。它将开发者编写的高级语言代码(如C语言)翻译成RISC-V指令集所能理解的低级机器码。汇编器则将汇编语言代码转换成机器码。链接器将多个编译后的目标文件链接在一起,生成最终的可执行文件。 除了编译、汇编和链接代码外,rv32-toolchain还提供了调试功能。调试器可以帮助开发者查找和修复代码中的错误。开发者可以在代码中设置断点,以便在特定位置停止,并逐步跟踪代码执行过程,帮助他们理解代码的运行情况。 总的来说,rv32-toolchain是一个专门为RISC-V 32位架构开发的工具链,它提供了一系列工具,用于编译、汇编、链接和调试代码。使用rv32-toolchain,开发者可以方便地开发和调试RISC-V 32位架构下的应用程序。 ### 回答2: rv32-toolchain是为RISC-V架构设计的工具链。RISC-V是一种基于精简指令集计算机(RISC)原则的新型处理器架构。rv32-toolchain由一系列的编译器、汇编器、链接器和调试器等工具组成,在RISC-V系统的软件开发中起到核心作用。 rv32-toolchain的主要功能是将高级语言(如C、C++等)编写的程序转化为RISC-V架构可执行的机器代码。首先,编译器负责将源代码编译成中间代码,然后由汇编器将中间代码翻译成汇编语言,再由链接器将多个汇编文件进行连接,最终生成可执行文件。同时,rv32-toolchain还提供调试器,用于调试程序的执行过程,帮助开发人员查找和修复错误。 使用rv32-toolchain,开发人员可以方便地进行RISC-V架构的软件开发。这个工具链具有跨平台的特性,可以在不同的操作系统上运行。开发人员可以通过在命令行中输入相关的编译、汇编和链接命令来使用rv32-toolchain完成代码的构建和生成。 rv32-toolchain的存在使得开发人员能够更加简单地进行RISC-V架构的软件开发工作,提高了开发效率。同时,由于rv32-toolchain是开源的,开发人员还可以根据自己的需求进行定制和修改,从而满足特定的开发需求。 总之,rv32-toolchain是专门为RISC-V架构设计的工具链,通过提供编译器、汇编器、链接器和调试器等一系列工具,方便开发人员进行RISC-V架构的软件开发工作,提高开发效率。同时,rv32-toolchain的跨平台特性和开源性也使其具有更高的灵活性和扩展性。 ### 回答3: rv32-toolchain是一个为RISC-V架构开发的工具链。它含了一系列工具编译器,用于将高级语言编写的程序转换成RISC-V指令集所支持的机器码。 工具链的核心组成部分是编译器,它负责将高级语言源代码翻译成汇编语言代码。rv32-toolchain使用的编译器通常是GCC或Clang,它们针对RISC-V架构进行了调整和优化,以获得更好的性能和兼容性。 此外,rv32-toolchain还括了汇编器和链接器。汇编器将汇编语言代码转换为机器码指令,而链接器则将多个目标文件合并为一个可执行文件。这样,开发人员可以将编写好的代码进行编译、汇编和链接,生成可在RISC-V架构上运行的程序。 除了编译器和相关的工具,rv32-toolchain还提供了一些辅助工具,如调试器和性能分析器。调试器可以帮助开发人员在程序执行过程中进行断点调试和变量查看,以便更好地理解程序的执行情况。性能分析器则可以帮助开发人员评估程序的性能,并进行优化。 总的来说,rv32-toolchain是一个为RISC-V架构开发的全套工具链,它使得开发人员能够方便地编写、编译和调试RISC-V架构的程序,为RISC-V生态系统的进一步发展做出了重要贡献。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值