我的linux之路-1

今年32岁多一点,以前接触过linux,但是没有实战经验,停留在写个简单的c函数编译一下这样。

最近当了爸爸,感觉花钱的地方会越来越多,自己的知识体系也要更新了,于是找出了几年前买的forlinx的开发板,尝试着从学习入门,现在就把这段时间的学习经历总结下来,给自己留个学习记录,顺便能帮到别人就更好了。

1 安装vmware station

这个没什么好说的,使用的是ver14 的版本,虚拟机工具什么的都带了,遇到的困难就是我的笔记本是4G的内存,win7系统,感觉跑起来有点卡,尤其是在后面安装了ubuntu之后更是明显。

2 安装ubuntu

怎么说这个过程呢,就是欠抽的过程。开发板带了个9.10 32位的系统,安装后,更新软件失败的太多,于是找了个朋友问下,朋友推荐了14.10的版本,这个好多了,许多软件都可以更新了,于是我开始按照开发板给出的指导手册倒腾着安装vi gcc arm-linux-gcc,在安装nfs系统时,失败了,一直提示缺少安装库。百度后找到了好多源列表开始更新,还是失败了,问朋友,喷狗无解。看到网上说这个版本不是LTS的版本,我想应该是没有提供更新维护,已经不能用了。于是,刚好看到除了最新的18版本,下载镜像,开始倒腾。可是这个beta版本是有问题的,我在使用vm的共享文件时,ubuntu检测不到共享文件夹。于是,下载掉这个版本,这次不敢再瞎折腾了,下载了16.04 LTS的版本,并在这个版本上继续我的学习之路。

总结下:太盲目了,没有了解ubuntu的版本,随意安装,对于初学者来说,花费大量时间倒腾这个东西,还不如老老实实的找个好版本来学习。

3 安装ftp

看到了网上有许多文件共享的方式和工具,但是教程上写的是ftp,那就按照这个来,在16.04LTS上安装ftp还是很顺利的,但是在修改属性文件时就头疼了,按照网上的步骤来,参考教程配置属性文件。还是失败了,主机和板子不能ping通。

百度后得到以下几个问题:

1 win7的防火墙没有关闭

2 ubuntu的上网方式不对

3 虚拟机的配置不对

4 属性文件配置不对

关掉防火墙,将dhcp方式获取网络地址改为手动分配,ubuntu在系统设置中修改网络地址有时是失败的,只好用ifconfig来搞,最后检查虚拟机网络连接方式(桥接)和属性文件(允许读写)

成功了。

4 安装nfs

nfs的目的是能够共享文件系统,按照教程来,基本没有遇到问题,学会了source  exportfs两个命令,最后因为对mount命令的不理解,一直挂载不进去。。。

5 编译内核

这里按照教程来,基本不会出错,但是有个问题必须提出来,并且我也做了详细的记录

root@ubuntu:/forlinx/linux-3.0.1# make zImage
  CHK    include/linux/version.h
  CHK    include/generated/utsrelease.h
make[1]: 'include/generated/mach-types.h' isup to date.
  CALL   scripts/checksyscalls.sh
  CHK    include/generated/compile.h
  TIMEC  kernel/timeconst.h
Can't use 'defined(@array)' (Maybe you shouldjust omit the defined()?) at kernel/timeconst.pl line 373.
/forlinx/linux-3.0.1/kernel/Makefile:140:recipe for target 'kernel/timeconst.h' failed
make[1]: *** [kernel/timeconst.h] Error 255
Makefile:947: recipe for target 'kernel'failed
make: *** [kernel] Error 2
出现了这些错误,
有人说是交叉编译器的位置错误,所以将Makefile中做了如下修改
export KBUILD_BUILDHOST := $(SUBARCH)
ARCH               := arm
CROSS_COMPILE        :=/usr/local/arm/4.3.2/bin/arm-linux-

#CROSS_COMPILE        ?=$(CONFIG_CROSS_COMPILE:"%"=%)
没有解决问题,直到看到了这个文章

因为perl版本升级,取消了一些语法格式

/timeconst.pl中的373行语句改成这样就可以了

https://www.cnblogs.com/asulove/p/6039907.html

0、开发环境

Ubuntu16.04.164bit

linux-2.6.32.4

 

1、错误描述

使用ubuntu14.0464bit)编译linux2.6.32.4并没有出现什么错误,但是使用ubuntu16.04.164bit)编译linux-2.6.32.4时,却提示Can't use 'defined(@array)' (Maybe youshould just omit the defined()?)错误。

 

2、解决方法

参考:编译kernel perl版本bug

最近升级了一下MAC系统,突然发现androidLinux kernel无法编译通过了,报了如下错误:

Can't use 'defined(@array)' (Maybe youshould just omit the defined()?) at kernel/timeconst.pl line 373.

其实,提示的错误信息已经明确告诉你了,你应该省略defined().

这里,我们打开 kernel/timeconst.pl

@val = @{$canned_values{$hz}};

if (defined(@val)) {

@val = compute_values($hz);

}

output($hz, @val);

if (defined(@val)) 改为if (@val),再次编译就可以通过了。

查了一下更新,发现其中有一项是perl版本升级到了 v5.22.1,然后查了perl官方文档,发现官网因为一个bug,该版本将defined(@array)去掉了。可以直接使用数组判断非空。

 问题解决了。下面我会继续学习其他的东西。

本人目前是做arm的嵌入式软件开发,所以想在嵌入式linux方向上发展,学习方法还不太明确,欢迎大家提出建议和意见。

猜你喜欢

转载自blog.csdn.net/yangzichen/article/details/80215573