操作记录

1烧录SD卡

镜像文件

F:/1.DE1-SOC/TMP/1.event/bak/DE1_SoC_UBUNTU.img

工具:4.Win32DiskImager-0.9.5-install.exe

SD卡格式化需要专用SD卡格式。

2系统启动连接网络

查看板卡和电脑信息:uname –a

内核版本:cat/proc/version

发行版本:cat /etc/issue

查看CPU信息:cat/proc/cpuinfo

 

apt-getupdate

 

ip

 

 

3.安装:ssh服务端

sudo apt-get install openssh-server

增加系统密码:sudo passwdroot

Window登入操作

 

4.下载源码安装lighttpd

 

建立临时目录:

wget http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.39.tar.gz

 

tar-zxvf lighttpd-1.4.39.tar.gz

 

./configure报错

 

Ø  报错:newly createdfile is older than distributed files!

apt-get install ntpdate

Ø  缺少pcre

sudoapt-get install libpcre3 libpcre3-dev

Ø  缺少zlib

zlib-headers and/orlibs where not found, install them or build with --without-zlib

sudo apt-get installzlib1g-dev

Ø  缺少bzip2

bzip2-headersand/or libs where not found, install them or build with --without-bzip2

sudoapt-get install libbz2-dev

执行成功

指定安装目录很重要:./configure–prefix=/lighttpd

5.make

Ok

6.make install

安装目录为/usr/local

7.建立文件夹和修改配置文件

启动lighttpd时报错(server.c.755) I will not set uid to 0

关闭配置文件中的

server.username
server.groupname

 

make install后的安装文件需要在编译时设置单独的文件夹,卸载可以直接删除文件即可,如果编译安装到了类似usr的地方,没有特别的办法删除干净

源码提供:makeuninstall/distclean/veryclean

https://www.cnblogs.com/x_wukong/p/4486412.html

建立简单CGI交互功能页面demo

Web页面编写程序,调用cgi程序得到计算结果并返回。

./lighttpd -f ../config/lighttpd.conf

killall lighttpd

8.上传文件

http://blog.csdn.net/edmond999/article/details/52994310

对lighttpd的详细配置参数

9.编译打包安装包文件

 

Make dist可以打包安装包

 

10.权限模块使用

更改所有权限为root

chown root:root /lighttpd/ -R

http://hlee.iteye.com/blog/549981

11.Qsys系统搭建编译

C:\Altera_TRAN\SW\de1_soc_lab3_hardware

 

 

 

/*

 * Macros for device 'PIO_IP', class'altera_avalon_pio'

 * The macros are prefixed with 'PIO_IP_'.

 * The prefix is the slave descriptor.

 */

#definePIO_IP_COMPONENT_TYPE altera_avalon_pio

#definePIO_IP_COMPONENT_NAME PIO_IP

#definePIO_IP_BASE 0xc0

#definePIO_IP_SPAN 32

#definePIO_IP_END 0xdf

#definePIO_IP_IRQ 1

#definePIO_IP_BIT_CLEARING_EDGE_REGISTER 0

#definePIO_IP_BIT_MODIFYING_OUTPUT_REGISTER 0

#definePIO_IP_CAPTURE 0

#definePIO_IP_DATA_WIDTH 16

#definePIO_IP_DO_TEST_BENCH_WIRING 0

#definePIO_IP_DRIVEN_SIM_VALUE 0

#definePIO_IP_EDGE_TYPE NONE

#definePIO_IP_FREQ 50000000

#define PIO_IP_HAS_IN1

#definePIO_IP_HAS_OUT 1

#definePIO_IP_HAS_TRI 0

#definePIO_IP_IRQ_TYPE LEVEL

#definePIO_IP_RESET_VALUE 1023

 

12编译内核

1.如何在Ubnutu中配置使用git

http://blog.sciencenet.cn/blog-858128-1060316.html

2.使用git clone

http://blog.csdn.net/u013519290/article/details/52279164

https://www.cnblogs.com/duwanjiang/p/5921167.html

3.加速git

https://www.cnblogs.com/dakewei/archive/2017/08/31/7461069.html

4.git库文件

https://github.com/thinkoco/linux-socfpga

1.     下载源码

地址:https://github.com/terasic/linux-socfpga

git clone https://github.com/thinkoco/linux-socfpga.git

2.     解压unzip linux-socfpga-master.zip

3.     配置环境变量

修改/etc/bash.brc的内容

export ARCH=arm

exportCROSS_COMPILE=/root/gcc-linaro-arm-linux-gnueabihf-4.8-2013.12_linux/bin/arm-linux-gnueabihf-

export LOADADDR=0x8000

 

4.     编译

make ARCH=arm socfpga_defconfig

make menuconfig(可选)配置   可配置界面

 

make ARCH=arm zImage LOADADDR=0x8000

make zImage 或者make uImage

 

5.     编译dtb

make socfpga_cyclone5.dtb

make dtbs

 

编译后生成路径 uImage 工作目录/linux-socfpga/arch/arm/boot

dtb 工作目录/linux-socfpga/arch/arm/boot/dts

 

 

编译ubuntu 内核的.config备份为.config_ubuntu在源文件下可用命令

Cp .config_ubuntu .config还原为配置

Ubuntu镜像需要EXT4分区格式支持.config_ubuntu中已经添加该文件系统的izhi

 

1.     加速git clone

安装PIP

sudo apt-get update

sudo apt-get install python-pip

sudo apt-get install python-setuptools m2crypto

安装shadowsocks

 pip installshadowsocks

https://www.sundabao.com/ubuntu%E4%BD%BF%E7%94%A8shadowsocks/

sslocal -c /home/test/shadowsocks.json

2.     git加速配置

https://www.jianshu.com/p/3ed14ca653a1

git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'

 

关闭

git config --global --unset http.proxy
git config --global --unset https.proxy

 

13.理解dtb

文件中文件目录

uImage:系统镜像文件

理解dtb,先要理解Device Tree

Linux中arch/arm中虫棉很plat和mach类的大量垃圾代码,大部分都只是在扫描板级细节,但是对内核来说不过是垃圾。

Device Tree是一种描述硬件的数据结构,Linux2.6以后引进,通过DT硬件细节可以直接透过传递给Linux,不需要kernel进行大量冗余编码。

 DeviceTree由节点(node)和属性(property)组成,成对出现的name和value。

CPU数量种类

内存基地址大小

总线和桥

外设连接

中断控制器和中断使用情况

GPIO控制器和GPIO使用情况

Clock控制器和clock使用情况

 

基本就是描述电路板上CPU、总线、设备组成的树,通过bootloader传递给内核,然后内核识别,并展开出Linux内核platform_device、I2c_client、spi_device等设备。设备用到的内存、IRQ等资源,被传递给内核,内核会将这些资源绑定给展开的相应设备。

 

 

Device Tree组成和结构

       增加用于描述设备硬件信息的文本格式,还增加编译这一文本的工具,同时boodloader也需要支持将编译后的Device Tree传递给Linux内核。

 

DTS(device tree source)

在ARM Linux中,一个dts对应一个ARM的machine,一般放置在内核的arch/arm/boot/dts/目录中,由于SoC可能对应多个machine(一个SoC可以对应多个产品和电路板)这些.dts文件包含许多共同的部分,Linux内核简化原则,把SoC公用部分或者多个machine共同的一部分提炼为.dtsi,类似与C的头文件,其他machine的.dts可以包含.dtsi,对于VEXPRESS而言,vexpress-v2m.dtsi被包含vexpress-v2p-ca9.dts引用。

所有ARM SoC都的dtsi都引用了skeleton.dtsi。

具体的理解参照文档

 

 

DTC(device tree compiler)

将.dts编译为.dtb的工具。DTC的源码位于内核的scripts/dtc目录,在Linux内核使能Device Tree的情况下,编译内核的时候主机工具dtc会被编译出来,对应scripts/dtc/Makefile中的“hostprogs-y = dtc”

 

Device Tree Blob(.dtb)

.dtb是.dts被DTC编译后的二进制格式的DeviceTree描述,由Linux内核解析。通常在制作NAND、SD启动image时,会为.dtb文件单独留下一个很小的区域以存放,之后bootloader在引导kernel的过程中,会先读取.dtb到内存。

 

Binding

对于Device Tree中的结点和属性具体是如何描述设备的硬件细节,一般需要文档来讲解,.txt,位于Documentation/device/bingding

 

Bootloader

Uboot mainline 从V1.1.3开始支持DeviceTree,其对ARM支持这是和ARM内核支持Device Tree同期完成

 为了使能DeviceTree 需要编译Uboot时在config文件中加入

#define CONFIG_OF_LIBFDT

 

 

 

DE1_SoC的FPGA PIO向HPS发送中断

 

 

 

1.安装Fast CGI

Apt-get install libfcgi-dev

2.配置Fcgi

https://www.douban.com/note/521728577/

 

测试CPU内存占用率

http://www.blogjava.net/daniel-tu/archive/2008/12/29/248883.html

 

 

同时理由CGI与FastCGI方式实现CGI程序加载,然后通过并发访问(每s/100次)资源占用率分析

并发量(次)

时间(s)

成功率

数据传输总量

CPU占用率

内存

10

 

 

 

 

 

50

 

 

 

 

 

100

 

 

 

 

 

200

 

 

 

 

 

400

 

 

 

 

 

500

 

 

 

 

 

 

 

 

自定义IP核解析

 

异构模式下总线级交互(总线+IP核)

3.1

IP核有公开IP核,能够满足日常应用需求,

但是在某些情况下,什么场景,常规IP核不能满足要求,所以需要定制私有IP核,

主要

1.总线传输时序,(AXI和Avalon总线传输时序不能匹配)

2.典型硬件的控制逻辑设计(七段数码管为例)

3.逻辑如何与AXI总线相连。

4.具体的实现

 

CPU挂载在Avalon BUS上,要想让七段数码管被CPU控制,需要写一个controller控制器挂载在AvalonBUS上。

SEG Controller如何挂载在AvalonBUS上,Altera在AvalonInterface Specification中定义了各种interface,只要将controller做这些接口就能与Avalon BUS总线相连,各种接口各具特色。由于七段数码管是个慢速装置,功能场景主要是受CPU的master控制,因此选择了Avalon—MM Slave interface。

在Avalon-MM的世界中,主要分Master Interface與Slave Interface,簡單的說,Master能夠自己發起傳輸,Slave則必須由Master控制而被動的發起傳輸,在Lab 2中,SEG7 Controller是由Nios II CPU這個master所控制,而不能主動發起傳輸,所以用的是Slave Interface。

 

一个典型IP核的目录结构,外层inc为register map,由macro构成,直接存取硬体

HAL的inc,放的是headerfiles,src放的是HAL的source code。

外层的inc可以不用

 

在开始开发IP核驱动时,需要了解Avalon-MM Slave Interface Spec以及其timing是如何運作。

(1)第一个周期在CLK上升沿开始

(2)Avalon Bus发出有效address、byteenable、write、writedata信号

(3)Slave IP在CLK上升沿捕获address、byteenable、write、writedata。整个传输在1个clk完成,下一个clk可以发起另一次传输。

一个Avalon-MM Slave Transfer最少必须包含

CLK、address、byteenable、write、writedata,并且在一个CLK内完成。

由于我们配置CPU的32bit databus,七段数码管也采用32bit传输,可以忽略byteenable信号,当忽略byteenable信号时,32bit全部enable,只剩下clk、address、write、writedata四个信号。

在quartus之后建议将clk与rset独立出来成clock interface,所以原来Avalon-MM slave interface剩下 address、write、writedata。

命名规范

 

 

 

模块接口定义:

 

parameter DATA_WIDTH     =32; // data bus width

31  parameter SEG7_NUM       = 8; // specify the number of seg7 unit

32  parameter ADDR_WIDTH     = 3; // log2(SEG7_NUM)

33 

34  reg [SEG7_NUM-1:0]     base_index;

35  reg [DATA_WIDTH-1:0]   write_data;

36  reg [(SEG7_NUM*8-1):0]reg_file;

37

 

 

module SEG7_Controller (

// Avalon clock interface siganals

input csi_clockreset_clk,

input csi_clockreset_reset_n,

// Signals for Avalon-MM slave port

input [ADDR_WIDTH-1:0] avs_s1_address,

input avs_s1_write,

input [DATA_WIDTH-1:0] avs_s1_writedata,

// user logic inputs and outputs

output [SEG7_NUM*8-1:0] avs_s1_export_oHEX

);

 

 

 

avs_s1_export_oHEX是要与 topmodule DE2.v想接。

 

 

对三种Bridge的访问在物理上都是由相应的Axi接口完成,由于Qsys中自动将Avalon总线转化为axi总线的机制,所以在自定义IP中,使用Avalon总线即可。

 

重点要掌握好的信号一个是waitrequest,另一个是readdatavalid。在任何传输方式中,当总线给出的waitrequest信号有效时,要发起读写的主/从设备应当保持输出的地址信号、读写信号、写数据时的数据信号以及在burst传输中的burstcount信号有效,直到waitrequest信号为低,表明目标设备已经接收请求,然后方可发起下一次传输。

 

当作为Avalon总线的Slave时,上图中的控制信号、地址信号都为输入,另外还会有一个ChipSlect信号。当有设备发出对该设备的read/write请求时,ChipSlect信号有效,同时addres为从设备的寄存器地址。例如该设备基址为0x0100,有两个32位寄存器,那么当某主设备发出地址0x0104选中该设备时,ChipSelect有效,同时从设备收到的Address1(在该例中地址以words为单位)。

 

https://www.cnblogs.com/blinkingstar/p/4299022.html

 

Avalon-MM的一般时序图

 

 

IP逻辑实现

当作为Avalon总线的Slave时

 

3.2

系统级驱动实现

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值