// gaussian_filter_axis_RBG.h
// 2021/10/27 by marsee
//
#ifndef __GAUSSIAN_FILTER_AXIS_RBG10_H__
#define __GAUSSIAN_FILTER_AXIS_RBG10_H__
#define HORIZONTAL 0
#define VERTICAL 1
#define HD_720
#ifdef HD_RES
#define DISPLAY_WIDTH 1920
#define DISPLAY_HIGHT 1080
#endif
#ifdef HD_720
#define DISPLAY_WIDTH 1280
#define DISPLAY_HIGHT 720
#endif
#ifdef SVGA_RES
#define DISPLAY_WIDTH 800
#define DISPLAY_HIGHT 600
#endif
#ifdef SMALL_RES
#define DISPLAY_WIDTH 64
#define DISPLAY_HIGHT 48
#endif
#define ALL_PIXEL_VALUE (HORIZONTAL_PIXEL_WIDTH*VERTICAL_PIXEL_WIDTH)
#define ORIGINAL_IMAGE 0
#define GAUSSIAN_FILTER 1
#endif
// gaussian_filter_RBG10.cpp
// 2021/10/27 by marsee
//
#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>
#include "gaussian_filter_axis_RBG.h"
constexpr int size = 3;
void gaussian_fil(ap_int<32> (&pix_mat)[size][size], ap_uint<24> &result);
ap_int<32> gaussian_fil_calc(ap_int<32> *pixd);
ap_int<32> separate_rbg(ap_int<32> rbg, ap_int<32> &r, ap_int<32> &b, ap_int<32> &g);
int gaussian_filter_axis(hls::stream<ap_axiu<24,1,1,1> >& ins,
hls::stream<ap_axiu<24,1,1,1> >& outs, int function){
#pragma HLS INTERFACE s_axilite port=function
#pragma HLS INTERFACE axis register_mode=both register port=outs
#pragma HLS INTERFACE axis register_mode=both register port=ins
#pragma HLS INTERFACE s_axilite port=return
ap_axiu<24,1,1,1> pix;
ap_axiu<24,1,1,1> gaussian;
ap_uint<24> val;
ap_int<32> line_buf[2][DISPLAY_WIDTH];
#pragma HLS array_partition variable=line_buf block factor=2 dim=1
#pragma HLS resource variable=line_buf core=RAM_2P
ap_int<32> pix_mat[size][size];
#pragma HLS array_partition variable=pix_mat complete
LOOP_WAIT_USER : do { // user が 1になった時にフレームがスタートする
#pragma HLS LOOP_TRIPCOUNT min=1 max=1 avg=1
ins >> pix;
} while(pix.user == 0);
LOOP_Y: for(int y=0; y<DISPLAY_HIGHT; y++){
LOOP_X: for(int x=0; x<DISPLAY_WIDTH; x++){
#pragma HLS PIPELINE II=1
if (!(x==0 && y==0)) // 最初の入力はすでに入力されている
ins >> pix; // AXI4-Stream からの入力
LOOP_PIX_MAT_K: for(int k=0; k<3; k++){
LOOP_PIX_MAT_M: for(int m=0; m<2; m++){
pix_mat[k][m] = pix_mat[k][m+1];
}
}
pix_mat[0][2] = line_buf[0][x];
pix_mat[1][2] = line_buf[1][x];
ap_int<32> y_val = pix.data;
pix_mat[2][2] = y_val;
line_buf[0][x] = line_buf[1][x]; // 行の入れ替え
line_buf[1][x] = y_val;
gaussian_fil(pix_mat, val);
gaussian.data = val;
if(x<2 || y<2)
gaussian.data = 0;
if(x==0 && y==0) // 最初のピクセル
gaussian.user = 1;
else
gaussian.user = 0;
if(x == (DISPLAY_WIDTH-1)) // 行の最後
gaussian.last = 1;
else
gaussian.last = 0;
if(function == GAUSSIAN_FILTER)
outs << gaussian;
else
outs << pix;
}
}
return(0);
}
// gaussian filter
//
// x0y0 x1y0 x2y0 1/16 2/16 1/16
// x0y1 x1y1 x2y1 2/16 4/16 2/16
// x0y2 x1y2 x2y2 1/16 2/16 1/16
//
void gaussian_fil(ap_int<32> (&pix_mat)[size][size], ap_uint<24> &result){
ap_int<32> pix_1d_r[9], pix_1d_b[9], pix_1d_g[9];
ap_int<32> y_r, y_b, y_g, y;
for(int i=0; i<9; i++){
separate_rbg(pix_mat[i/3][i%3], pix_1d_r[i], pix_1d_b[i], pix_1d_g[i]);
}
y_r = gaussian_fil_calc(pix_1d_r);
y_b = gaussian_fil_calc(pix_1d_b);
y_g = gaussian_fil_calc(pix_1d_g);
result = (y_r << 16) + (y_b << 8) + y_g;
}
// gaussian_fil_calc
ap_int<32> gaussian_fil_calc(ap_int<32> *pixd){
ap_int<32> y;
y = pixd[0] + 2 * pixd[1] + pixd[2] + 2 * pixd[3] + 4 * pixd[4] + 2 * pixd[5] + pixd[6] + 2 * pixd[7] + pixd[8];
y = y / 16;
if(y<0)
y = -y;
//y = 0;
else if(y>255) // 8 bits
y = 255;
return(y);
}
// separate_rbg
// RGBを分離する
// RBGのフォーマットは、{R(8bits), B(8bits), G(8bits)}, 1pixel = 32bits
//
ap_int<32> separate_rbg(ap_int<32> rbg, ap_int<32> &r, ap_int<32> &b, ap_int<32> &g){
b = (rbg>>8) & 0xff;
g = rbg & 0xff;
r = (rbg>>16) & 0xff;
return(0);
}
// gaussian_filter_axis_RBG_tb.cpp
// 2021/10/19 by marsee
//
#include <stdio.h>
#include <stdint.h>
#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>
#include "opencv2/opencv.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgcodecs/imgcodecs.hpp"
#include "gaussian_filter_axis_RBG.h"
int gaussian_filter_axis(hls::stream<ap_axiu<24,1,1,1> >& ins, hls::stream<ap_axiu<24,1,1,1> >& outs, int function);
int gaussian_filter_axis_soft(hls::stream<ap_axiu<24,1,1,1> >& ins,
hls::stream<ap_axiu<24,1,1,1> >& outs, int function);
ap_int<32> gaussian_fil_soft(ap_int<32> *pix_1d);
ap_int<32> gaussian_fil_calc_soft(ap_int<32> *pixd);
ap_int<32> separate_rbg_soft(ap_int<32> rbg, ap_int<32> &r, ap_int<32> &b, ap_int<32> &g);
const char INPUT_JPG_FILE[] = "test2.jpg";
const char OUTPUT_JPG_FILE[] = "gaussian.jpg";
const char ORG_OUT_JPG_FILE[] = "org.jpg";
int main(){
hls::stream<ap_axiu<24,1,1,1> > ins, ins2;
hls::stream<ap_axiu<24,1,1,1> > ins_soft;
hls::stream<ap_axiu<24,1,1,1> > outs, outs2;
hls::stream<ap_axiu<24,1,1,1> > outs_soft;
ap_axiu<24,1,1,1> pix;
ap_axiu<24,1,1,1> vals, vals_soft;
// JPG ファイルをMat に読み込む
cv::Mat img = cv::imread(INPUT_JPG_FILE);
// ピクセルを入れる領域の確保
std::vector<int32_t> rd_bmp(sizeof(int32_t)*img.cols*img.rows);
std::vector<int32_t> hw_gaussian(sizeof(int32_t)*(img.cols)*(img.rows));
std::vector<int32_t> sw_gaussian(sizeof(int32_t)*(img.cols)*(img.rows));
// rd_bmp にJPGのピクセルを代入
cv::Mat_<cv::Vec3b> dst_vec3b = cv::Mat_<cv::Vec3b>(img);
for (int y=0; y<img.rows; y++){
for (int x=0; x<img.cols; x++){
cv::Vec3b pixel;
pixel = dst_vec3b(y,x);
rd_bmp[y*img.cols+x] = (pixel[1] & 0xff) | ((pixel[0] & 0xff)<<8) | ((pixel[2] & 0xff)<<16); // RBG 8 bits
// blue - pixel[0]; green - pixel[1]; red - pixel[2];
}
}
// ins に入力データを用意する
for(int i=0; i<5; i++){ // dummy data
pix.user = 0;
pix.data = i;
ins << pix;
}
for(int j=0; j < img.rows; j++){
for(int i=0; i < img.cols; i++){
pix.data = (int32_t)rd_bmp[(j*img.cols)+i];
if (j==0 && i==0) // 最初のデータの時に TUSER を 1 にする
pix.user = 1;
else
pix.user = 0;
if (i == img.cols-1) // 行の最後でTLASTをアサートする
pix.last = 1;
else
pix.last = 0;
ins << pix;
ins2 << pix;
ins_soft << pix;
}
}
gaussian_filter_axis(ins, outs, GAUSSIAN_FILTER); // ハードウェアのソーベルフィルタ
gaussian_filter_axis_soft(ins_soft, outs_soft, GAUSSIAN_FILTER); // ソフトウェアのソーベルフィルタ
// ハードウェアとソフトウェアのソーベルフィルタの値のチェック
for (int y=0; y<img.rows; y++){ // 結果の画像サイズはx-2, y-2
for (int x=0; x<img.cols; x++){
outs >> vals;
outs_soft >> vals_soft;
ap_uint<32> val = vals.data;
hw_gaussian[y*img.cols+x] = (int32_t)val;
if (val != vals_soft.data){
printf("ERROR HW and SW results mismatch x = %ld, y = %ld, HW = %x, SW = %x\n",
x, y, val, vals_soft.data);
//return(1);
}
}
}
printf("Success HW and SW results match\n");
const int gaussian_row = img.rows;
const int gaussian_cols = img.cols;
cv::Mat wbmpf(gaussian_row, gaussian_cols, CV_8UC3);
// wbmpf にgaussian フィルタ処理後の画像を入力
cv::Mat_<cv::Vec3b> sob_vec3b = cv::Mat_<cv::Vec3b>(wbmpf);
for (int y=0; y<wbmpf.rows; y++){
for (int x=0; x<wbmpf.cols; x++){
cv::Vec3b pixel;
pixel = sob_vec3b(y,x);
int32_t rbg = hw_gaussian[y*wbmpf.cols+x];
pixel[0] = ((rbg >> 8) & 0xff); // blue
pixel[1] = (rbg & 0xff); // green
pixel[2] = ((rbg >> 16) & 0xff); // red
sob_vec3b(y,x) = pixel;
}
}
// ハードウェアのソーベルフィルタの結果を jpg ファイルへ出力する
cv::imwrite(OUTPUT_JPG_FILE, wbmpf);
gaussian_filter_axis(ins2, outs2, ORIGINAL_IMAGE); // 元画像出力
cv::Mat wbmpf2(gaussian_row, gaussian_cols, CV_8UC3);
// wbmpf2 に元画像を入力
sob_vec3b = cv::Mat_<cv::Vec3b>(wbmpf2);
for (int y=0; y<wbmpf.rows; y++){
for (int x=0; x<wbmpf.cols; x++){
cv::Vec3b pixel;
pixel = sob_vec3b(y,x);
outs2 >> vals;
int32_t val = vals.data;
pixel[0] = ((val >> 8) & 0xff); // blue
pixel[1] = (val & 0xff); // green
pixel[2] = ((val >> 16) & 0xff); // red
sob_vec3b(y,x) = pixel;
}
}
// 元画像を jpg ファイルへ出力する
cv::imwrite(ORG_OUT_JPG_FILE, wbmpf2);
return(0);
}
int gaussian_filter_axis_soft(hls::stream<ap_axiu<24,1,1,1> >& ins,
hls::stream<ap_axiu<24,1,1,1> >& outs, int function){
ap_axiu<24,1,1,1> pix;
ap_axiu<24,1,1,1> gaussian;
ap_int<32> line_buf[2][DISPLAY_WIDTH];
ap_int<32> pix_mat[3][3];
ap_int<32> pix_1d[9];
LOOP_WAIT_USER : do { // user が 1になった時にフレームがスタートする
ins >> pix;
} while(pix.user == 0);
LOOP_Y: for(int y=0; y<DISPLAY_HIGHT; y++){
LOOP_X: for(int x=0; x<DISPLAY_WIDTH; x++){
if (!(x==0 && y==0)) // 最初の入力はすでに入力されている
ins >> pix; // AXI4-Stream からの入力
LOOP_PIX_MAT_K: for(int k=0; k<3; k++){
LOOP_PIX_MAT_M: for(int m=0; m<2; m++){
pix_mat[k][m] = pix_mat[k][m+1];
}
}
pix_mat[0][2] = line_buf[0][x];
pix_mat[1][2] = line_buf[1][x];
ap_int<32> y_val = pix.data;
pix_mat[2][2] = y_val;
line_buf[0][x] = line_buf[1][x]; // 行の入れ替え
line_buf[1][x] = y_val;
for(int i=0; i<9; i++){
pix_1d[i] = pix_mat[i/3][i%3];
}
gaussian.data = gaussian_fil_soft(pix_1d);
if(x<2 || y<2)
gaussian.data = 0;
if(x==0 && y==0) // 最初のピクセル
gaussian.user = 1;
else
gaussian.user = 0;
if(x == (DISPLAY_WIDTH-1)) // 行の最後
gaussian.last = 1;
else
gaussian.last = 0;
if(function == GAUSSIAN_FILTER)
outs << gaussian;
else
outs << pix;
}
}
return(0);
}
// gaussian filter
//
// x0y0 x1y0 x2y0 1/16 2/16 1/16
// x0y1 x1y1 x2y1 2/16 4/16 2/16
// x0y2 x1y2 x2y2 1/16 2/16 1/16
//
ap_int<32> gaussian_fil_soft(ap_int<32> *pix_1d){
ap_int<32> pix_1d_r[9], pix_1d_b[9], pix_1d_g[9];
ap_int<32> y_r, y_b, y_g, y;
for(int i=0; i<9; i++){
separate_rbg_soft(pix_1d[i], pix_1d_r[i], pix_1d_b[i], pix_1d_g[i]);
}
y_r = gaussian_fil_calc_soft(pix_1d_r);
y_b = gaussian_fil_calc_soft(pix_1d_b);
y_g = gaussian_fil_calc_soft(pix_1d_g);
y = (y_r << 16) + (y_b << 8) + y_g;
return(y);
}
// gaussian_fil_calc
ap_int<32> gaussian_fil_calc_soft(ap_int<32> *pixd){
ap_int<32> y;
y = pixd[0] + 2 * pixd[1] + pixd[2] + 2 * pixd[3] + 4 * pixd[4] + 2 * pixd[5] + pixd[6] + 2 * pixd[7] + pixd[8];
y = y / 16;
if(y<0)
y = -y;
//y = 0;
else if(y>255) // 8 bits
y = 255;
return(y);
}
// separate_rbg
// RGBを分離する
// RBGのフォーマットは、{R(8bits), B(8bits), G(8bits)}, 1pixel = 32bits
//
ap_int<32> separate_rbg_soft(ap_int<32> rbg, ap_int<32> &r, ap_int<32> &b, ap_int<32> &g){
b = (rbg>>8) & 0xff;
g = rbg & 0xff;
r = (rbg>>16) & 0xff;
return(0);
}
-I/usr/local/include
-L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_imgproc
#include "xsobel_filter_axis.h"
XSobel_filter_axis sobelf;
// Sobel filter settings
XSobel_filter_axis_Initialize(&sobelf, 0);
XSobel_filter_axis_Set_function_r(&sobelf, 0); // Pass through camera data
XSobel_filter_axis_Start(&sobelf);
XSobel_filter_axis_EnableAutoRestart(&sobelf);
while(1){
xil_printf("Please input 1 or 0. 0: Pass through camera data, 1: Sobel filtering ");
int chr = inbyte();
switch(chr){
case '0':
xil_printf("0\n\r");
XSobel_filter_axis_Set_function_r(&sobelf, 0); // Pass through camera data
break;
case '1':
xil_printf("1\n\r");
XSobel_filter_axis_Set_function_r(&sobelf, 1); // Sobel filtering
break;
case 'q':
xil_printf("q\n\r");
break;
}
if(chr=='q')
break;
}
ERROR: [HLS 200-1023] Part 'xck26sfvc784-2LV-c' is not installed.
// sobel_filter_axis_RBG.h
// 2021/10/18 by marsee
//
#ifndef __SOBEL_FILTER_AXIS_RBG10_H__
#define __SOBEL_FILTER_AXIS_RBG10_H__
#define HORIZONTAL 0
#define VERTICAL 1
#define HD_720
#ifdef HD_RES
#define DISPLAY_WIDTH 1920
#define DISPLAY_HIGHT 1080
#endif
#ifdef HD_720
#define DISPLAY_WIDTH 1280
#define DISPLAY_HIGHT 720
#endif
#ifdef SVGA_RES
#define DISPLAY_WIDTH 800
#define DISPLAY_HIGHT 600
#endif
#ifdef SMALL_RES
#define DISPLAY_WIDTH 64
#define DISPLAY_HIGHT 48
#endif
#define ALL_PIXEL_VALUE (HORIZONTAL_PIXEL_WIDTH*VERTICAL_PIXEL_WIDTH)
#define ORIGINAL_IMAGE 0
#define SOBEL_FILTER 1
#endif
// sobel_filter_RBG10.cpp
// 2021/10/18 by marsee
//
#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>
#include "sobel_filter_axis_RBG.h"
ap_int<32> sobel_fil(ap_int<32> h_or_v, ap_int<32> x0y0, ap_int<32> x1y0, ap_int<32> x2y0, ap_int<32> x0y1,
ap_int<32> x1y1, ap_int<32> x2y1, ap_int<32> x0y2, ap_int<32> x1y2, ap_int<32> x2y2);
ap_int<32> conv_rbg2y(ap_int<32> rbg);
ap_int<32> square_root8(ap_int<32> val);
int sobel_filter_axis(hls::stream<ap_axiu<24,1,1,1> >& ins,
hls::stream<ap_axiu<24,1,1,1> >& outs, int function){
#pragma HLS INTERFACE s_axilite port=function
#pragma HLS INTERFACE axis register_mode=both register port=outs
#pragma HLS INTERFACE axis register_mode=both register port=ins
#pragma HLS INTERFACE s_axilite port=return
ap_axiu<24,1,1,1> pix;
ap_axiu<24,1,1,1> sobel;
ap_int<32> sobel_val, sobel_h_val, sobel_v_val;
ap_int<32> line_buf[2][DISPLAY_WIDTH];
#pragma HLS array_partition variable=line_buf block factor=2 dim=1
#pragma HLS resource variable=line_buf core=RAM_2P
ap_int<32> pix_mat[3][3];
#pragma HLS array_partition variable=pix_mat complete
LOOP_WAIT_USER : do { // user が 1になった時にフレームがスタートする
#pragma HLS LOOP_TRIPCOUNT min=1 max=1 avg=1
ins >> pix;
} while(pix.user == 0);
LOOP_Y: for(int y=0; y<DISPLAY_HIGHT; y++){
LOOP_X: for(int x=0; x<DISPLAY_WIDTH; x++){
#pragma HLS PIPELINE II=1
if (!(x==0 && y==0)) // 最初の入力はすでに入力されている
ins >> pix; // AXI4-Stream からの入力
LOOP_PIX_MAT_K: for(int k=0; k<3; k++){
LOOP_PIX_MAT_M: for(int m=0; m<2; m++){
pix_mat[k][m] = pix_mat[k][m+1];
}
}
pix_mat[0][2] = line_buf[0][x];
pix_mat[1][2] = line_buf[1][x];
ap_int<32> y_val = conv_rbg2y(pix.data);
pix_mat[2][2] = y_val;
line_buf[0][x] = line_buf[1][x]; // 行の入れ替え
line_buf[1][x] = y_val;
sobel_h_val = sobel_fil(HORIZONTAL, pix_mat[0][0], pix_mat[0][1], pix_mat[0][2],
pix_mat[1][0], pix_mat[1][1], pix_mat[1][2],
pix_mat[2][0], pix_mat[2][1], pix_mat[2][2]);
sobel_v_val = sobel_fil(VERTICAL, pix_mat[0][0], pix_mat[0][1], pix_mat[0][2],
pix_mat[1][0], pix_mat[1][1], pix_mat[1][2],
pix_mat[2][0], pix_mat[2][1], pix_mat[2][2]);
sobel_val = square_root8(sobel_h_val*sobel_h_val + sobel_v_val*sobel_v_val);
sobel.data = (sobel_val<<16)+(sobel_val<<8)+sobel_val;
if(x<2 || y<2)
sobel.data = 0;
if(x==0 && y==0) // 最初のピクセル
sobel.user = 1;
else
sobel.user = 0;
if(x == (DISPLAY_WIDTH-1)) // 行の最後
sobel.last = 1;
else
sobel.last = 0;
if(function == SOBEL_FILTER)
outs << sobel;
else
outs << pix;
}
}
return(0);
}
// RBGからYへの変換
// RBGのフォーマットは、{R(8bits), B(8bits), G(8bits)}, 1pixel = 32bits
// 輝度信号Yのみに変換する。変換式は、Y = 0.299R + 0.587G + 0.114B
// "YUVフォーマット及び YUV<->RGB変換"を参考にした。http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/yuv.html
// 2013/09/27 : float を止めて、すべてint にした
ap_int<32> conv_rbg2y(ap_int<32> rbg){
ap_int<32> r, g, b, y_f;
ap_int<32> y;
b = (rbg>>8) & 0xff;
g = rbg & 0xff;
r = (rbg>>16) & 0xff;
y_f = 77*r + 150*g + 29*b; //y_f = 0.299*r + 0.587*g + 0.114*b;の係数に256倍した
y = y_f >> 8; // 256で割る
return(y);
}
// sobel filter
// HORZONTAL
// x0y0 x1y0 x2y0 1 2 1
// x0y1 x1y1 x2y1 0 0 0
// x0y2 x1y2 x2y2 -1 -2 -1
// VERTICAL
// x0y0 x1y0 x2y0 1 0 -1
// x0y1 x1y1 x2y1 2 0 -2
// x0y2 x1y2 x2y2 1 0 -1
ap_int<32> sobel_fil(ap_int<32> h_or_v, ap_int<32> x0y0, ap_int<32> x1y0, ap_int<32> x2y0, ap_int<32> x0y1,
ap_int<32> x1y1, ap_int<32> x2y1, ap_int<32> x0y2, ap_int<32> x1y2, ap_int<32> x2y2){
ap_int<32> y;
if(h_or_v == HORIZONTAL){
y = x0y0 + 2*x1y0 + x2y0 - x0y2 - 2*x1y2 - x2y2;
} else {
y = x0y0 - x2y0 + 2*x0y1 - 2*x2y1 + x0y2 - x2y2;
}
if(y<0)
y = -y;
//y = 0;
else if(y>255) // 8 bits
y = 255;
return(y);
}
// square_root8
// 8 bit幅のsquare_rootを求める
ap_int<32> square_root8(ap_int<32> val){
ap_int<32> temp = 0;
ap_int<32> square;
for(int i=7; i>=0; --i){
temp += (1 << i);
square = temp * temp;
if(square > val){
temp -= (1 << i);
}
}
return(temp);
}
// sobel_filter_axis_RBG_tb.cpp
// 2021/10/19 by marsee
//
#include <stdio.h>
#include <stdint.h>
#include <ap_int.h>
#include <hls_stream.h>
#include <ap_axi_sdata.h>
#include "opencv2/opencv.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgcodecs/imgcodecs.hpp"
#include "sobel_filter_axis_RBG.h"
int sobel_filter_axis(hls::stream<ap_axiu<24,1,1,1> >& ins, hls::stream<ap_axiu<24,1,1,1> >& outs, int function);
int sobel_filter_soft(int32_t *cam_fb, int32_t *sobel_fb,
int32_t x_size, int32_t y_size);
int32_t square_root8_soft(int32_t val);
const char INPUT_JPG_FILE[] = "test2.jpg";
const char OUTPUT_JPG_FILE[] = "sobel.jpg";
const char ORG_OUT_JPG_FILE[] = "org.jpg";
int main(){
hls::stream<ap_axiu<24,1,1,1> > ins, ins2;
hls::stream<ap_axiu<24,1,1,1> > ins_soft;
hls::stream<ap_axiu<24,1,1,1> > outs, outs2;
hls::stream<ap_axiu<24,1,1,1> > outs_soft;
ap_axiu<24,1,1,1> pix;
ap_axiu<24,1,1,1> vals;
// JPG ファイルをMat に読み込む
cv::Mat img = cv::imread(INPUT_JPG_FILE);
// ピクセルを入れる領域の確保
std::vector<int32_t> rd_bmp(sizeof(int32_t)*img.cols*img.rows);
std::vector<int32_t> hw_sobel(sizeof(int32_t)*(img.cols)*(img.rows));
std::vector<int32_t> sw_sobel(sizeof(int32_t)*(img.cols)*(img.rows));
// rd_bmp にJPGのピクセルを代入
cv::Mat_<cv::Vec3b> dst_vec3b = cv::Mat_<cv::Vec3b>(img);
for (int y=0; y<img.rows; y++){
for (int x=0; x<img.cols; x++){
cv::Vec3b pixel;
pixel = dst_vec3b(y,x);
rd_bmp[y*img.cols+x] = (pixel[1] & 0xff) | ((pixel[0] & 0xff)<<8) | ((pixel[2] & 0xff)<<16); // RBG 8 bits
// blue - pixel[0]; green - pixel[1]; red - pixel[2];
}
}
// ins に入力データを用意する
for(int i=0; i<5; i++){ // dummy data
pix.user = 0;
pix.data = i;
ins << pix;
}
for(int j=0; j < img.rows; j++){
for(int i=0; i < img.cols; i++){
pix.data = (ap_int<32>)rd_bmp[(j*img.cols)+i];
if (j==0 && i==0) // 最初のデータの時に TUSER を 1 にする
pix.user = 1;
else
pix.user = 0;
if (i == img.cols-1) // 行の最後でTLASTをアサートする
pix.last = 1;
else
pix.last = 0;
ins << pix;
ins2 << pix;
}
}
sobel_filter_axis(ins, outs, SOBEL_FILTER); // ハードウェアのソーベルフィルタ
sobel_filter_soft(rd_bmp.data(), sw_sobel.data(), img.cols, img.rows); // ソフトウェアのソーベルフィルタ
// ハードウェアとソフトウェアのソーベルフィルタの値のチェック
for (int y=0; y<img.rows; y++){ // 結果の画像サイズはx-2, y-2
for (int x=0; x<img.cols; x++){
outs >> vals;
ap_uint<32> val = vals.data;
hw_sobel[y*img.cols+x] = (int32_t)val;
if (val != sw_sobel[y*img.cols+x]){
printf("ERROR HW and SW results mismatch x = %ld, y = %ld, HW = %x, SW = %x\n",
x, y, val, sw_sobel[y*(img.cols-2)+x]);
return(1);
}
}
}
printf("Success HW and SW results match\n");
const int sobel_row = img.rows;
const int sobel_cols = img.cols;
cv::Mat wbmpf(sobel_row, sobel_cols, CV_8UC3);
// wbmpf にsobel フィルタ処理後の画像を入力
cv::Mat_<cv::Vec3b> sob_vec3b = cv::Mat_<cv::Vec3b>(wbmpf);
for (int y=0; y<wbmpf.rows; y++){
for (int x=0; x<wbmpf.cols; x++){
cv::Vec3b pixel;
pixel = sob_vec3b(y,x);
int32_t rbg = hw_sobel[y*wbmpf.cols+x];
pixel[0] = ((rbg >> 8) & 0xff); // blue
pixel[1] = (rbg & 0xff); // green
pixel[2] = ((rbg >> 16) & 0xff); // red
sob_vec3b(y,x) = pixel;
}
}
// ハードウェアのソーベルフィルタの結果を jpg ファイルへ出力する
cv::imwrite(OUTPUT_JPG_FILE, wbmpf);
sobel_filter_axis(ins2, outs2, ORIGINAL_IMAGE); // 元画像出力
cv::Mat wbmpf2(sobel_row, sobel_cols, CV_8UC3);
// wbmpf2 に元画像を入力
sob_vec3b = cv::Mat_<cv::Vec3b>(wbmpf2);
for (int y=0; y<wbmpf.rows; y++){
for (int x=0; x<wbmpf.cols; x++){
cv::Vec3b pixel;
pixel = sob_vec3b(y,x);
outs2 >> vals;
int32_t val = vals.data;
pixel[0] = ((val >> 8) & 0xff); // blue
pixel[1] = (val & 0xff); // green
pixel[2] = ((val >> 16) & 0xff); // red
sob_vec3b(y,x) = pixel;
}
}
// 元画像を jpg ファイルへ出力する
cv::imwrite(ORG_OUT_JPG_FILE, wbmpf2);
return(0);
}
int32_t sobel_fil_soft(int32_t h_or_v, int32_t x0y0, int32_t x1y0, int32_t x2y0, int32_t x0y1,
int32_t x1y1, int32_t x2y1, int32_t x0y2, int32_t x1y2, int32_t x2y2);
int32_t conv_rbg2y_soft(int32_t rbg);
int sobel_filter_soft(int32_t *cam_fb, int32_t *sobel_fb,
int32_t x_size, int32_t y_size){
int32_t sobel_val, sobel_h_val, sobel_v_val;
int32_t pix[3][3];
for(int y=0; y<y_size; y++){
for(int x=0; x<x_size; x++){
for(int i=2; i>=0; --i){
for(int j=2; j>=0; --j){
if(x>=2 && y>=2)
pix[i][j] = conv_rbg2y_soft(cam_fb[(y-i)*x_size+(x-j)]);
else
pix[i][j] = 0;
}
}
sobel_h_val = sobel_fil_soft(HORIZONTAL,pix[0][0], pix[0][1], pix[0][2],
pix[1][0], pix[1][1], pix[1][2],
pix[2][0], pix[2][1], pix[2][2]);
sobel_v_val = sobel_fil_soft(VERTICAL, pix[0][0], pix[0][1], pix[0][2],
pix[1][0], pix[1][1], pix[1][2],
pix[2][0], pix[2][1], pix[2][2]);
sobel_val = square_root8_soft(sobel_h_val*sobel_h_val + sobel_v_val*sobel_v_val);
sobel_fb[y*x_size+x] = (sobel_val<<16)+(sobel_val<<8)+sobel_val;
}
}
return(0);
}
// RBGからYへの変換
// RBGのフォーマットは、{R(8bits), B(8bits), G(8bits)}, 1pixel = 32bits
// 輝度信号Yのみに変換する。変換式は、Y = 0.299R + 0.587G + 0.114B
// "YUVフォーマット及び YUV<->RGB変換"を参考にした。http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/yuv.html
// 2013/09/27 : float を止めて、すべてint にした
int32_t conv_rbg2y_soft(int32_t rbg){
int32_t r, g, b, y_f;
int32_t y;
b = (rbg>>8) & 0xff;
g = rbg & 0xff;
r = (rbg>>16) & 0xff;
y_f = 77*r + 150*g + 29*b; //y_f = 0.299*r + 0.587*g + 0.114*b;の係数に256倍した
y = y_f >> 8; // 256で割る
return(y);
}
// sobel filter
// HORZONTAL
// x0y0 x1y0 x2y0 1 2 1
// x0y1 x1y1 x2y1 0 0 0
// x0y2 x1y2 x2y2 -1 -2 -1
// VERTICAL
// x0y0 x1y0 x2y0 1 0 -1
// x0y1 x1y1 x2y1 2 0 -2
// x0y2 x1y2 x2y2 1 0 -1
int32_t sobel_fil_soft(int32_t h_or_v, int32_t x0y0, int32_t x1y0, int32_t x2y0, int32_t x0y1,
int32_t x1y1, int32_t x2y1, int32_t x0y2, int32_t x1y2, int32_t x2y2){
int32_t y;
if(h_or_v == HORIZONTAL){
y = x0y0 + 2*x1y0 + x2y0 - x0y2 - 2*x1y2 - x2y2;
} else {
y = x0y0 - x2y0 + 2*x0y1 - 2*x2y1 + x0y2 - x2y2;
}
if(y<0)
y = -y;
//y = 0;
else if(y>255)
y = 255;
return(y);
}
// square_root8_soft
// 8 bit幅のsquare_rootを求める
int32_t square_root8_soft(int32_t val){
int32_t temp = 0;
int32_t square;
for(int i=7; i>=0; --i){
temp += (1 << i);
square = temp * temp;
if(square > val){
temp -= (1 << i);
}
}
return(temp);
}
を設定した。-I/usr/local/include
を設定した。-L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_imgproc
ila_0 : mipi_csi2_rx_subsys_st_0 の video_out 出力
ila_1 : v_axi4s_vid_out_0 の vtg_ce, locked, overflow, underflow, fifo_read_level[12:0], status[31:0]
ila_2 : v_demosaic_0 の m_axis_video 出力
ila_3 : v_gamma_lut_0 の m_axis_video 出力
1. カメラからの入力を受ける mipi_csi2_rx_subsyst_0 は 16 ビット AXI4-Stream 出力となっている。
2. axis_subset_converter_1 に入って、 tdata[9:2] を抽出して、 8 ビット AXI4-Stream 出力として出力される。
3. v_domosaic_0 に入って、 8 ビット AXI4-Stream 入力が 24 ビット AXI4-Stream 出力として出力される。ここで、デモザイクされる。ベイヤー・パターンが RBG (Red, Blue, Green) パターンに変換される。
4. v_gmma_lut_0 では、 24 ビット AXI4-Stream 入出力となっていて、ガンマ補正が行われる。
5. axi_vdma_0 (S_AXIS_S2MM) で 24 ビット AXI4-Stream 入力データを DDR メモリに書いている。
1. DDR メモリからデータを読んで、 axi_vdma_0 (M_AXIS_MM2S) から 24 ビット AXI4-Stream が出力される。
2. axis_suset_converter_0 で 24 ビット AXI4-Stream を以下のように置き換えている。
tdata[15:8],tdata[23:16],tdata[7:0] つまり RBG を BRG に置き換えているようだ。これは、Zynq UltraScale+ MPSoC のDisplayPort のLiveVideo のピクセルデータの色のビットフィールドが BRG だからだろう?(”Zynq UltraScale+ MPSoC のDisplayPort のLiveVideo のピクセルデータ”参照)
3. v_axi4s_vid_out_0 で BRG に変換された 24 ビット AXI4-Stream を入力して、 vid_data[35:0] に変換している。その他、ビデオ用の信号を主力して、 Zynq UltraScale+ MPSoC の dp_live_video に入力している。
というエラーが出た。undefined reference to `pow'
とすれば良いとのことだ。つまりRUN (終了コードが0以外のコード) ; exit 0
を後に追加すれば良い。; exit 0
をRUN apt-get update --fix-missing
に変更した。RUN apt-get update --fix-missing; exit 0
をRUN bash /install/ubuntu_install_python.sh;
に変更した。RUN bash /install/ubuntu_install_python.sh; exit 0
というエラーが出てしまった。find: ‘/dev/vboxusb’: 許可がありません
と言われてしまった。docker: bad format for path: .
The command '/bin/sh -c apt-get update --fix-missing' returned a non-zero code: 100
ERROR: docker build failed.
(base) masaaki@masaaki-H110M4-M01:/media/masaaki/Ubuntu_Disk/Ultra96-V2/TVM_DL$ ./tvm/docker/build.sh demo_vitis_ai bash
Using default context path: /media/masaaki/Ubuntu_Disk/Ultra96-V2/TVM_DL/tvm/docker
WORKSPACE: /media/masaaki/Ubuntu_Disk/Ultra96-V2/TVM_DL/tvm/docker/../
CI_DOCKER_EXTRA_PARAMS:
COMMAND: bash
CONTAINER_TYPE: demo_vitis_ai
BUILD_TAG: tvm
DOCKER CONTAINER NAME: tvm.demo_vitis_ai
DOCKER_IMAGE_TAG: latest
DOCKER_IMG_SPEC: tvm.demo_vitis_ai:latest
Building container (tvm.demo_vitis_ai)...
Sending build context to Docker daemon 201.7kB
Step 1/19 : FROM xilinx/vitis-ai:1.4.916
1.4.916: Pulling from xilinx/vitis-ai
01bf7da0a88c: Pulling fs layer
f3b4a5f15c7a: Pulling fs layer
57ffbe87baa1: Pulling fs layer
195050004f95: Pulling fs layer
28ef4752131e: Pulling fs layer
161717b3aab7: Pulling fs layer
c8a243b4402d: Pulling fs layer
f4cc9f3f5ed3: Pulling fs layer
078585cf4882: Pulling fs layer
9bb8a2ef4fe9: Pulling fs layer
31628d2f8579: Pull complete
5759a1729f74: Pull complete
f6bf5622f603: Pull complete
343ab32c9bff: Pull complete
e417d03e00f0: Pull complete
db307339ff66: Pull complete
53b28f82bce7: Pull complete
b879f906e0dc: Pull complete
a117f5309e41: Pull complete
6dc4b00c80a5: Pull complete
a718f95d6864: Pull complete
d1cfc3aa434e: Pull complete
e52a4b0ebf4b: Pull complete
9eb3845e0638: Pull complete
f65df791d7f6: Pull complete
2e3224a3157e: Pull complete
e84eff50ebe1: Pull complete
6f7467e62fb5: Pull complete
e98adc80d6b3: Pull complete
f45c539d8128: Pull complete
896507c50eb7: Pull complete
fb407cba96a3: Pull complete
c4c370fb9ac4: Pull complete
Digest: sha256:1d568b1b77601a4e9989f969a74dfd9fd61102b713cb137edb83d76db11cea91
Status: Downloaded newer image for xilinx/vitis-ai:1.4.916
---> a325686c45a3
Step 2/19 : RUN apt-get update --fix-missing
---> Running in c2232d8956c0
Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:2 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
Get:3 http://ppa.launchpad.net/timsc/opencv-3.4/ubuntu bionic InRelease [15.9 kB]
Ign:4 https://apt.kitware.com/ubuntu bionic InRelease
Err:5 https://apt.kitware.com/ubuntu bionic Release
Certificate verification failed: The certificate is NOT trusted. The certificate chain uses expired certificate. Could not handshake: Error in the certificate verification. [IP: 66.194.253.25 443]
Get:6 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu bionic InRelease [20.8 kB]
Get:7 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:8 http://security.ubuntu.com/ubuntu bionic-security/restricted amd64 Packages [606 kB]
Get:9 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Get:10 http://ppa.launchpad.net/timsc/opencv-3.4/ubuntu bionic/main amd64 Packages [11.1 kB]
Get:11 http://archive.ubuntu.com/ubuntu bionic/multiverse amd64 Packages [186 kB]
Get:12 http://archive.ubuntu.com/ubuntu bionic/universe amd64 Packages [11.3 MB]
Get:13 http://ppa.launchpad.net/ubuntu-toolchain-r/test/ubuntu bionic/main amd64 Packages [50.4 kB]
Get:14 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [1,430 kB]
Get:15 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [2,365 kB]
Get:16 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 Packages [26.7 kB]
Get:17 http://archive.ubuntu.com/ubuntu bionic/restricted amd64 Packages [13.5 kB]
Get:18 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages [1,344 kB]
Get:19 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [2,801 kB]
Get:20 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [2,209 kB]
Get:21 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 Packages [34.4 kB]
Get:22 http://archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 Packages [638 kB]
Get:23 http://archive.ubuntu.com/ubuntu bionic-backports/universe amd64 Packages [11.4 kB]
Get:24 http://archive.ubuntu.com/ubuntu bionic-backports/main amd64 Packages [11.3 kB]
Reading package lists... Done
E: The repository 'https://apt.kitware.com/ubuntu bionic Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
The command '/bin/sh -c apt-get update --fix-missing' returned a non-zero code: 100
ERROR: docker build failed.
Xilinx Zynq MP First Stage Boot Loader
Release 2020.1 Oct 20 2020 - 10:36:48
NOTICE: ATF running on XCZU3EG/silicon v4/RTL5.1 at 0xfffea000
NOTICE: BL31: v2.2(release):xilinx_rebase_v2.2_2020.1
NOTICE: BL31: Built : 10:38:45, Oct 20 2020
U-Boot 2020.01 (Oct 20 2020 - 10:34:46 +0000)
Model: Avnet Ultra96 Rev1
Board: Xilinx ZynqMP
DRAM: 2 GiB
PMUFW: v1.1
EL Level: EL2
Chip ID: zu3eg
NAND: 0 MiB
MMC: mmc@ff160000: 0, mmc@ff170000: 1
In: serial@ff010000
Out: serial@ff010000
Err: serial@ff010000
Bootmode: SD_MODE
Reset reason: EXTERNAL
Net: No ethernet found.
Hit any key to stop autoboot: 0
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found U-Boot script /boot.scr
1636 bytes read in 12 ms (132.8 KiB/s)
## Executing script at 20000000
17884584 bytes read in 1301 ms (13.1 MiB/s)
## Loading kernel from FIT Image at 10000000 ...
Using 'conf@1' configuration
Trying 'kernel@0' kernel subimage
Description: Linux Kernel
Type: Kernel Image
Compression: uncompressed
Data Start: 0x100000d4
Data Size: 17840640 Bytes = 17 MiB
Architecture: AArch64
OS: Linux
Load Address: 0x00080000
Entry Point: 0x00080000
Hash algo: sha1
Hash value: fc5beeb394d3ef60e0b1a59223599552bf8d18e3
Verifying Hash Integrity ... sha1+ OK
## Loading fdt from FIT Image at 10000000 ...
Using 'conf@1' configuration
Trying 'fdt@0' fdt subimage
Description: Flattened Device Tree blob
Type: Flat Device Tree
Compression: uncompressed
Data Start: 0x11103bcc
Data Size: 42117 Bytes = 41.1 KiB
Architecture: AArch64
Hash algo: sha1
Hash value: ae7d4f0f3d4aa18c46ec3a55242ac03e8edbfd4e
Verifying Hash Integrity ... sha1+ OK
Booting using the fdt blob at 0x11103bcc
Loading Kernel Image
Loading Device Tree to 000000000fff2000, end 000000000ffff484 ... OK
Starting kernel ...
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[ 0.000000] Linux version 5.4.0-xilinx-v2020.1 (oe-user@oe-host) (gcc version 9.2.0 (GCC)) #1 SMP Tue Oct 20 10:19:22 UTC 2020
[ 0.000000] Machine model: Avnet Ultra96 Rev1
[ 0.000000] efi: Getting EFI parameters from FDT:
[ 0.000000] efi: UEFI not found.
[ 0.000000] cma: Reserved 128 MiB at 0x0000000077c00000
[ 0.000000] psci: probing for conduit method from DT.
[ 0.000000] psci: PSCIv1.1 detected in firmware.
[ 0.000000] psci: Using standard PSCI v0.2 function IDs
[ 0.000000] psci: MIGRATE_INFO_TYPE not supported.
[ 0.000000] psci: SMC Calling Convention v1.1
[ 0.000000] percpu: Embedded 22 pages/cpu s50392 r8192 d31528 u90112
[ 0.000000] Detected VIPT I-cache on CPU0
[ 0.000000] CPU features: detected: ARM erratum 845719
[ 0.000000] Speculative Store Bypass Disable mitigation not required
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 515844
[ 0.000000] Kernel command line: root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=1 uio_pdrv_genirq.of_id="generic-uio" clk_ignore_unused
[ 0.000000] Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)
[ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[ 0.000000] Memory: 1906580K/2096128K available (12220K kernel code, 718K rwdata, 3668K rodata, 768K init, 532K bss, 58476K reserved, 131072K cma-reserved)
[ 0.000000] rcu: Hierarchical RCU implementation.
[ 0.000000] rcu: RCU event tracing is enabled.
[ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=4.
[ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
[ 0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[ 0.000000] GIC: Adjusting CPU interface base to 0x00000000f902f000
[ 0.000000] GIC: Using split EOI/Deactivate mode
[ 0.000000] random: get_random_bytes called from start_kernel+0x2a8/0x42c with crng_init=0
[ 0.000000] arch_timer: cp15 timer(s) running at 99.99MHz (phys).
[ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x17102373f5, max_idle_ns: 440795203772 ns
[ 0.000003] sched_clock: 56 bits at 99MHz, resolution 10ns, wraps every 4398046511100ns
[ 0.000378] Console: colour dummy device 80x25
[ 0.000575] printk: console [tty0] enabled
[ 0.000606] Calibrating delay loop (skipped), value calculated using timer frequency.. 199.99 BogoMIPS (lpj=399999)
[ 0.000622] pid_max: default: 32768 minimum: 301
[ 0.000806] Mount-cache hash table entries: 4096 (order: 3, 32768 bytes, linear)
[ 0.000827] Mountpoint-cache hash table entries: 4096 (order: 3, 32768 bytes, linear)
[ 0.002148] ASID allocator initialised with 32768 entries
[ 0.002220] rcu: Hierarchical SRCU implementation.
[ 0.002450] EFI services will not be available.
[ 0.002613] smp: Bringing up secondary CPUs ...
[ 0.003014] Detected VIPT I-cache on CPU1
[ 0.003062] CPU1: Booted secondary processor 0x0000000001 [0x410fd034]
[ 0.003468] Detected VIPT I-cache on CPU2
[ 0.003488] CPU2: Booted secondary processor 0x0000000002 [0x410fd034]
[ 0.003848] Detected VIPT I-cache on CPU3
[ 0.003868] CPU3: Booted secondary processor 0x0000000003 [0x410fd034]
[ 0.003918] smp: Brought up 1 node, 4 CPUs
[ 0.004001] SMP: Total of 4 processors activated.
[ 0.004011] CPU features: detected: 32-bit EL0 Support
[ 0.004020] CPU features: detected: CRC32 instructions
[ 0.004068] CPU: All CPU(s) started at EL2
[ 0.004088] alternatives: patching kernel code
[ 0.005497] devtmpfs: initialized
[ 0.010514] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[ 0.010540] futex hash table entries: 1024 (order: 4, 65536 bytes, linear)
[ 0.014307] xor: measuring software checksum speed
[ 0.052056] 8regs : 2375.000 MB/sec
[ 0.092082] 32regs : 2725.000 MB/sec
[ 0.132121] arm64_neon: 2365.000 MB/sec
[ 0.132130] xor: using function: 32regs (2725.000 MB/sec)
[ 0.132150] pinctrl core: initialized pinctrl subsystem
[ 0.133068] NET: Registered protocol family 16
[ 0.134611] DMA: preallocated 256 KiB pool for atomic allocations
[ 0.134640] audit: initializing netlink subsys (disabled)
[ 0.135050] cpuidle: using governor menu
[ 0.135251] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[ 0.135274] audit: type=2000 audit(0.132:1): state=initialized audit_enabled=0 res=1
[ 0.148133] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages
[ 0.148152] HugeTLB registered 32.0 MiB page size, pre-allocated 0 pages
[ 0.148162] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages
[ 0.148172] HugeTLB registered 64.0 KiB page size, pre-allocated 0 pages
[ 1.223940] DRBG: Continuing without Jitter RNG
[ 1.300908] raid6: neonx8 gen() 1561 MB/s
[ 1.368919] raid6: neonx8 xor() 1466 MB/s
[ 1.436955] raid6: neonx4 gen() 1485 MB/s
[ 1.505008] raid6: neonx4 xor() 1430 MB/s
[ 1.573064] raid6: neonx2 gen() 1134 MB/s
[ 1.641104] raid6: neonx2 xor() 1189 MB/s
[ 1.709135] raid6: neonx1 gen() 739 MB/s
[ 1.777167] raid6: neonx1 xor() 895 MB/s
[ 1.845254] raid6: int64x8 gen() 1165 MB/s
[ 1.913294] raid6: int64x8 xor() 763 MB/s
[ 1.981342] raid6: int64x4 gen() 984 MB/s
[ 2.049366] raid6: int64x4 xor() 738 MB/s
[ 2.117409] raid6: int64x2 gen() 683 MB/s
[ 2.185478] raid6: int64x2 xor() 601 MB/s
[ 2.253495] raid6: int64x1 gen() 452 MB/s
[ 2.321580] raid6: int64x1 xor() 461 MB/s
[ 2.321588] raid6: using algorithm neonx8 gen() 1561 MB/s
[ 2.321596] raid6: .... xor() 1466 MB/s, rmw enabled
[ 2.321604] raid6: using neon recovery algorithm
[ 2.322336] iommu: Default domain type: Translated
[ 2.322659] SCSI subsystem initialized
[ 2.322833] usbcore: registered new interface driver usbfs
[ 2.322869] usbcore: registered new interface driver hub
[ 2.322904] usbcore: registered new device driver usb
[ 2.322962] mc: Linux media interface: v0.10
[ 2.322989] videodev: Linux video capture interface: v2.00
[ 2.323014] pps_core: LinuxPPS API ver. 1 registered
[ 2.323022] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[ 2.323040] PTP clock support registered
[ 2.323064] EDAC MC: Ver: 3.0.0
[ 2.323549] zynqmp-ipi-mbox mailbox@ff990400: Registered ZynqMP IPI mbox with TX/RX channels.
[ 2.323746] FPGA manager framework
[ 2.323896] Advanced Linux Sound Architecture Driver Initialized.
[ 2.324263] Bluetooth: Core ver 2.22
[ 2.324292] NET: Registered protocol family 31
[ 2.324300] Bluetooth: HCI device and connection manager initialized
[ 2.324313] Bluetooth: HCI socket layer initialized
[ 2.324324] Bluetooth: L2CAP socket layer initialized
[ 2.324339] Bluetooth: SCO socket layer initialized
[ 2.324778] clocksource: Switched to clocksource arch_sys_counter
[ 2.324897] VFS: Disk quotas dquot_6.6.0
[ 2.324950] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[ 2.329287] NET: Registered protocol family 2
[ 2.329703] tcp_listen_portaddr_hash hash table entries: 1024 (order: 2, 16384 bytes, linear)
[ 2.329742] TCP established hash table entries: 16384 (order: 5, 131072 bytes, linear)
[ 2.329857] TCP bind hash table entries: 16384 (order: 6, 262144 bytes, linear)
[ 2.330192] TCP: Hash tables configured (established 16384 bind 16384)
[ 2.330302] UDP hash table entries: 1024 (order: 3, 32768 bytes, linear)
[ 2.330349] UDP-Lite hash table entries: 1024 (order: 3, 32768 bytes, linear)
[ 2.330500] NET: Registered protocol family 1
[ 2.330830] RPC: Registered named UNIX socket transport module.
[ 2.330840] RPC: Registered udp transport module.
[ 2.330847] RPC: Registered tcp transport module.
[ 2.330854] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 2.331127] PCI: CLS 0 bytes, default 64
[ 2.331717] hw perfevents: no interrupt-affinity property for /pmu, guessing.
[ 2.331903] hw perfevents: enabled with armv8_pmuv3 PMU driver, 7 counters available
[ 2.332833] Initialise system trusted keyrings
[ 2.332934] workingset: timestamp_bits=46 max_order=19 bucket_order=0
[ 2.333810] NFS: Registering the id_resolver key type
[ 2.333829] Key type id_resolver registered
[ 2.333836] Key type id_legacy registered
[ 2.333851] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[ 2.333878] jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
[ 2.346680] NET: Registered protocol family 38
[ 2.346693] Key type asymmetric registered
[ 2.346702] Asymmetric key parser 'x509' registered
[ 2.346732] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 246)
[ 2.346813] io scheduler mq-deadline registered
[ 2.346823] io scheduler kyber registered
[ 2.374645] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[ 2.378259] cacheinfo: Unable to detect cache hierarchy for CPU 0
[ 2.383270] brd: module loaded
[ 2.388867] loop: module loaded
[ 2.389712] mtdoops: mtd device (mtddev=name/number) must be supplied
[ 2.391386] libphy: Fixed MDIO Bus: probed
[ 2.392438] tun: Universal TUN/TAP device driver, 1.6
[ 2.392550] CAN device driver interface
[ 2.393255] PPP generic driver version 2.4.2
[ 2.394202] usbcore: registered new interface driver cdc_acm
[ 2.394211] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
[ 2.394242] usbcore: registered new interface driver cdc_wdm
[ 2.394281] usbcore: registered new interface driver usb-storage
[ 2.394349] usbcore: registered new interface driver usbserial_generic
[ 2.394376] usbserial: USB Serial support registered for generic
[ 2.394405] usbcore: registered new interface driver usb_serial_simple
[ 2.394428] usbserial: USB Serial support registered for carelink
[ 2.394455] usbserial: USB Serial support registered for zio
[ 2.394476] usbserial: USB Serial support registered for funsoft
[ 2.394501] usbserial: USB Serial support registered for flashloader
[ 2.394523] usbserial: USB Serial support registered for google
[ 2.394546] usbserial: USB Serial support registered for libtransistor
[ 2.394568] usbserial: USB Serial support registered for vivopay
[ 2.394590] usbserial: USB Serial support registered for moto_modem
[ 2.394613] usbserial: USB Serial support registered for motorola_tetra
[ 2.394638] usbserial: USB Serial support registered for novatel_gps
[ 2.394660] usbserial: USB Serial support registered for hp4x
[ 2.394684] usbserial: USB Serial support registered for suunto
[ 2.394705] usbserial: USB Serial support registered for siemens_mpi
[ 2.394891] gadgetfs: USB Gadget filesystem, version 24 Aug 2004
[ 2.395411] rtc_zynqmp ffa60000.rtc: registered as rtc0
[ 2.395473] i2c /dev entries driver
[ 2.397658] device-mapper: ioctl: 4.41.0-ioctl (2019-09-16) initialised: dm-devel@redhat.com
[ 2.397725] Bluetooth: HCI UART driver ver 2.3
[ 2.397736] Bluetooth: HCI UART protocol H4 registered
[ 2.397744] Bluetooth: HCI UART protocol BCSP registered
[ 2.397767] Bluetooth: HCI UART protocol LL registered
[ 2.397775] Bluetooth: HCI UART protocol ATH3K registered
[ 2.397796] Bluetooth: HCI UART protocol Three-wire (H5) registered
[ 2.397841] Bluetooth: HCI UART protocol Intel registered
[ 2.397863] Bluetooth: HCI UART protocol QCA registered
[ 2.397896] usbcore: registered new interface driver bcm203x
[ 2.397929] usbcore: registered new interface driver bpa10x
[ 2.397962] usbcore: registered new interface driver bfusb
[ 2.397994] usbcore: registered new interface driver btusb
[ 2.398042] usbcore: registered new interface driver ath3k
[ 2.398173] EDAC MC: ECC not enabled
[ 2.398339] EDAC DEVICE0: Giving out device to module zynqmp-ocm-edac controller zynqmp_ocm: DEV ff960000.memory-controller (INTERRUPT)
[ 2.398722] pwrseq_simple sdio_pwrseq: mmc failed to get default resetn GPIO
[ 2.398742] pwrseq_simple sdio_pwrseq: mmc failed to get default chip_en GPIO
[ 2.398878] sdhci: Secure Digital Host Controller Interface driver
[ 2.398887] sdhci: Copyright(c) Pierre Ossman
[ 2.398894] sdhci-pltfm: SDHCI platform and OF driver helper
[ 2.399315] ledtrig-cpu: registered to indicate activity on CPUs
[ 2.399372] zynqmp_firmware_probe Platform Management API v1.1
[ 2.399384] zynqmp_firmware_probe Trustzone version v1.0
[ 2.402987] zynqmp-pinctrl firmware:zynqmp-firmware:pinctrl: zynqmp pinctrl initialized
[ 2.426667] alg: No test for xilinx-zynqmp-aes (zynqmp-aes)
[ 2.426905] zynqmp_aes zynqmp_aes: AES Successfully Registered
[ 2.426905]
[ 2.427111] alg: No test for xilinx-keccak-384 (zynqmp-keccak-384)
[ 2.427393] alg: No test for xilinx-zynqmp-rsa (zynqmp-rsa)
[ 2.427692] usbcore: registered new interface driver usbhid
[ 2.427701] usbhid: USB HID core driver
[ 2.427942] xlnk xlnk: Major 242
[ 2.428056] xlnk xlnk: xlnk driver loaded
[ 2.428065] xlnk xlnk: xlnk_pdev is not null
[ 2.430188] fpga_manager fpga0: Xilinx ZynqMP FPGA Manager registered
[ 2.430525] usbcore: registered new interface driver snd-usb-audio
[ 2.431417] pktgen: Packet Generator for packet performance testing. Version: 2.75
[ 2.432041] IPVS: Registered protocols (TCP, UDP)
[ 2.432066] IPVS: Connection hash table configured (size=4096, memory=64Kbytes)
[ 2.432218] IPVS: ipvs loaded.
[ 2.432228] IPVS: [rr] scheduler registered.
[ 2.432386] Initializing XFRM netlink socket
[ 2.432496] NET: Registered protocol family 10
[ 2.433095] Segment Routing with IPv6
[ 2.433236] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[ 2.433642] NET: Registered protocol family 17
[ 2.433662] NET: Registered protocol family 15
[ 2.433689] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[ 2.433703] can: controller area network core (rev 20170425 abi 9)
[ 2.433744] NET: Registered protocol family 29
[ 2.433753] can: raw protocol (rev 20170425)
[ 2.433762] can: broadcast manager protocol (rev 20170425 t)
[ 2.433773] can: netlink gateway (rev 20190810) max_hops=1
[ 2.433866] Bluetooth: RFCOMM TTY layer initialized
[ 2.433882] Bluetooth: RFCOMM socket layer initialized
[ 2.433905] Bluetooth: RFCOMM ver 1.11
[ 2.433918] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[ 2.433926] Bluetooth: BNEP filters: protocol multicast
[ 2.433936] Bluetooth: BNEP socket layer initialized
[ 2.433945] Bluetooth: HIDP (Human Interface Emulation) ver 1.2
[ 2.433955] Bluetooth: HIDP socket layer initialized
[ 2.434117] 9pnet: Installing 9P2000 support
[ 2.434149] Key type dns_resolver registered
[ 2.434529] registered taskstats version 1
[ 2.434538] Loading compiled-in X.509 certificates
[ 2.435024] Btrfs loaded, crc32c=crc32c-generic
[ 2.445742] ff000000.serial: ttyPS1 at MMIO 0xff000000 (irq = 40, base_baud = 6249993) is a xuartps
[ 2.446385] ff010000.serial: ttyPS0 at MMIO 0xff010000 (irq = 41, base_baud = 6249993) is a xuartps
[ 3.818363] printk: console [ttyPS0] enabled
[ 3.822929] of-fpga-region fpga-full: FPGA Region probed
[ 3.829598] xilinx-dpdma fd4c0000.dma: Xilinx DPDMA engine is probed
[ 3.836213] xilinx-zynqmp-dma fd500000.dma: ZynqMP DMA driver Probe success
[ 3.843343] xilinx-zynqmp-dma fd510000.dma: ZynqMP DMA driver Probe success
[ 3.850456] xilinx-zynqmp-dma fd520000.dma: ZynqMP DMA driver Probe success
[ 3.857581] xilinx-zynqmp-dma fd530000.dma: ZynqMP DMA driver Probe success
[ 3.864705] xilinx-zynqmp-dma fd540000.dma: ZynqMP DMA driver Probe success
[ 3.871821] xilinx-zynqmp-dma fd550000.dma: ZynqMP DMA driver Probe success
[ 3.878938] xilinx-zynqmp-dma fd560000.dma: ZynqMP DMA driver Probe success
[ 3.886060] xilinx-zynqmp-dma fd570000.dma: ZynqMP DMA driver Probe success
[ 3.893282] xilinx-zynqmp-dma ffa80000.dma: ZynqMP DMA driver Probe success
[ 3.900403] xilinx-zynqmp-dma ffa90000.dma: ZynqMP DMA driver Probe success
[ 3.907530] xilinx-zynqmp-dma ffaa0000.dma: ZynqMP DMA driver Probe success
[ 3.914644] xilinx-zynqmp-dma ffab0000.dma: ZynqMP DMA driver Probe success
[ 3.921768] xilinx-zynqmp-dma ffac0000.dma: ZynqMP DMA driver Probe success
[ 3.928888] xilinx-zynqmp-dma ffad0000.dma: ZynqMP DMA driver Probe success
[ 3.936009] xilinx-zynqmp-dma ffae0000.dma: ZynqMP DMA driver Probe success
[ 3.943127] xilinx-zynqmp-dma ffaf0000.dma: ZynqMP DMA driver Probe success
[ 3.950496] xilinx-psgtr fd400000.zynqmp_phy: Lane:1 type:8 protocol:4 pll_locked:yes
[ 3.961627] xilinx-dp-snd-codec fd4a0000.zynqmp-display:zynqmp_dp_snd_codec0: Xilinx DisplayPort Sound Codec probed
[ 3.972325] xilinx-dp-snd-pcm zynqmp_dp_snd_pcm0: Xilinx DisplayPort Sound PCM probed
[ 3.980375] xilinx-dp-snd-pcm zynqmp_dp_snd_pcm1: Xilinx DisplayPort Sound PCM probed
[ 3.988926] xilinx-dp-snd-card fd4a0000.zynqmp-display:zynqmp_dp_snd_card: xilinx-dp-snd-codec-dai <-> xilinx-dp-snd-codec-dai mapping ok
[ 4.001439] xilinx-dp-snd-card fd4a0000.zynqmp-display:zynqmp_dp_snd_card: xilinx-dp-snd-codec-dai <-> xilinx-dp-snd-codec-dai mapping ok
[ 4.014197] xilinx-dp-snd-card fd4a0000.zynqmp-display:zynqmp_dp_snd_card: Xilinx DisplayPort Sound Card probed
[ 4.024381] OF: graph: no port node found in /amba/zynqmp-display@fd4a0000
[ 4.031408] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[ 4.038025] [drm] No driver support for vblank timestamp query.
[ 4.044028] xlnx-drm xlnx-drm.0: bound fd4a0000.zynqmp-display (ops 0xffffffc010d3be50)
[ 5.128811] [drm] Cannot find any crtc or sizes
[ 5.133618] [drm] Initialized xlnx 1.0.0 20130509 for fd4a0000.zynqmp-display on minor 0
[ 5.141720] zynqmp-display fd4a0000.zynqmp-display: ZynqMP DisplayPort Subsystem driver probed
[ 5.152036] xilinx-axipmon ffa00000.perf-monitor: Probed Xilinx APM
[ 5.158575] xilinx-axipmon fd0b0000.perf-monitor: Probed Xilinx APM
[ 5.165084] xilinx-axipmon fd490000.perf-monitor: Probed Xilinx APM
[ 5.171586] xilinx-axipmon ffa10000.perf-monitor: Probed Xilinx APM
[ 5.178565] dwc3 fe200000.dwc3: Failed to get clk 'ref': -2
[ 5.184373] xilinx-psgtr fd400000.zynqmp_phy: Lane:2 type:0 protocol:3 pll_locked:yes
[ 5.195811] dwc3 fe300000.dwc3: Failed to get clk 'ref': -2
[ 5.201592] xilinx-psgtr fd400000.zynqmp_phy: Lane:3 type:1 protocol:3 pll_locked:yes
[ 5.211803] xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
[ 5.217307] xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 1
[ 5.225088] xhci-hcd xhci-hcd.0.auto: hcc params 0x0238f625 hci version 0x100 quirks 0x0000000202010010
[ 5.234506] xhci-hcd xhci-hcd.0.auto: irq 49, io mem 0xfe300000
[ 5.240685] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.04
[ 5.248954] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 5.256178] usb usb1: Product: xHCI Host Controller
[ 5.261055] usb usb1: Manufacturer: Linux 5.4.0-xilinx-v2020.1 xhci-hcd
[ 5.267668] usb usb1: SerialNumber: xhci-hcd.0.auto
[ 5.272885] hub 1-0:1.0: USB hub found
[ 5.276648] hub 1-0:1.0: 1 port detected
[ 5.280779] xhci-hcd xhci-hcd.0.auto: xHCI Host Controller
[ 5.286267] xhci-hcd xhci-hcd.0.auto: new USB bus registered, assigned bus number 2
[ 5.293933] xhci-hcd xhci-hcd.0.auto: Host supports USB 3.0 SuperSpeed
[ 5.300517] usb usb2: We don't know the algorithms for LPM for this host, disabling LPM.
[ 5.308679] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 5.04
[ 5.316957] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 5.324176] usb usb2: Product: xHCI Host Controller
[ 5.329052] usb usb2: Manufacturer: Linux 5.4.0-xilinx-v2020.1 xhci-hcd
[ 5.335666] usb usb2: SerialNumber: xhci-hcd.0.auto
[ 5.340796] hub 2-0:1.0: USB hub found
[ 5.344558] hub 2-0:1.0: 1 port detected
[ 5.350249] i2c i2c-0: Added multiplexed i2c bus 2
[ 5.355184] i2c i2c-0: Added multiplexed i2c bus 3
[ 5.360115] i2c i2c-0: Added multiplexed i2c bus 4
[ 5.365048] i2c i2c-0: Added multiplexed i2c bus 5
[ 5.435217] random: fast init done
[ 5.612786] usb 1-1: new high-speed USB device number 2 using xhci-hcd
[ 5.765266] usb 1-1: New USB device found, idVendor=0424, idProduct=2744, bcdDevice= 2.05
[ 5.773463] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 5.780597] usb 1-1: Product: USB2744
[ 5.784257] usb 1-1: Manufacturer: Microchip Tech
[ 5.844597] hub 1-1:1.0: USB hub found
[ 5.848383] hub 1-1:1.0: 4 ports detected
[ 5.908552] usb 2-1: new SuperSpeed Gen 1 USB device number 2 using xhci-hcd
[ 5.933150] usb 2-1: New USB device found, idVendor=0424, idProduct=5744, bcdDevice= 2.05
[ 5.941333] usb 2-1: New USB device strings: Mfr=2, Product=3, SerialNumber=0
[ 5.948468] usb 2-1: Product: USB5744
[ 5.952128] usb 2-1: Manufacturer: Microchip Tech
[ 5.988589] hub 2-1:1.0: USB hub found
[ 5.992375] hub 2-1:1.0: 3 ports detected
[ 6.095101] i2c i2c-0: Added multiplexed i2c bus 6
[ 6.100058] i2c i2c-0: Added multiplexed i2c bus 7
[ 6.105004] i2c i2c-0: Added multiplexed i2c bus 8
[ 6.109993] i2c i2c-0: Added multiplexed i2c bus 9
[ 6.114792] pca954x 0-0075: registered 8 multiplexed busses for I2C switch pca9548
[ 6.122396] cdns-i2c ff030000.i2c: 100 kHz mmio ff030000 irq 30
[ 6.129339] cpufreq: cpufreq_online: CPU0: Running at unlisted freq: 1199998 KHz
[ 6.136820] cpufreq: cpufreq_online: CPU0: Unlisted initial frequency changed to: 1199999 KHz
[ 6.145605] pwrseq_simple sdio_pwrseq: mmc succesfully got gpio_resetn
[ 6.152156] pwrseq_simple sdio_pwrseq: mmc succesfully got gpio_chip_en
[ 6.201203] mmc0: SDHCI controller on ff160000.mmc [ff160000.mmc] using ADMA 64-bit
[ 6.209686] sdhci-arasan ff170000.mmc: allocated mmc-pwrseq
[ 6.246330] mmc1: SDHCI controller on ff170000.mmc [ff170000.mmc] using ADMA 64-bit
[ 6.254505] usb 1-1.2: new high-speed USB device number 3 using xhci-hcd
[ 6.264572] input: gpio-keys as /devices/platform/gpio-keys/input/input0
[ 6.271698] rtc_zynqmp ffa60000.rtc: setting system clock to 1970-01-01T00:00:08 UTC (8)
[ 6.276825] [drm] Cannot find any crtc or sizes
[ 6.279804] of_cfs_init
[ 6.286785] of_cfs_init: OK
[ 6.288602] mmc0: new high speed SDHC card at address aaaa
[ 6.289756] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[ 6.295714] mmcblk0: mmc0:aaaa SC16G 14.8 GiB
[ 6.313025] mmcblk0: p1 p2
[ 6.321088] mmc1: new high speed SDIO card at address 0001
[ 6.397556] usb 1-1.2: New USB device found, idVendor=0b95, idProduct=1780, bcdDevice= 0.01
[ 6.405908] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 6.413222] usb 1-1.2: Product: GU-1000T
[ 6.417141] usb 1-1.2: Manufacturer: PLANEX COM. Inc.
[ 6.422184] usb 1-1.2: SerialNumber: 020707
[ 6.442251] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[ 6.448784] clk: Not disabling unused clocks
[ 6.453057] ALSA device list:
[ 6.456013] #0: DisplayPort monitor
[ 6.460098] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
[ 6.468711] cfg80211: failed to load regulatory.db
[ 6.498967] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[ 6.507102] VFS: Mounted root (ext4 filesystem) on device 179:2.
[ 6.516414] devtmpfs: mounted
[ 6.519714] Freeing unused kernel memory: 768K
[ 6.524206] Run /sbin/init as init process
[ 6.564810] usb 1-1.4: new high-speed USB device number 4 using xhci-hcd
[ 6.669469] usb 1-1.4: New USB device found, idVendor=0424, idProduct=2740, bcdDevice= 2.00
[ 6.677836] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 6.685149] usb 1-1.4: Product: Hub Controller
[ 6.689590] usb 1-1.4: Manufacturer: Microchip Tech
[ 7.090511] systemd[1]: System time before build time, advancing clock.
[ 7.122827] systemd[1]: systemd 237 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid)
[ 7.144427] systemd[1]: Detected architecture arm64.
Welcome to PYNQ Linux, based on Ubuntu 18.04!
[ 7.210419] systemd[1]: Set hostname to <pynq>.
[ 7.815840] random: systemd: uninitialized urandom read (16 bytes read)
[ 7.822709] systemd[1]: Started ntp-systemd-netif.path.
[ OK ] Started ntp-systemd-netif.path.
[ 7.836905] random: systemd: uninitialized urandom read (16 bytes read)
[ 7.844196] systemd[1]: Created slice System Slice.
[ OK ] Created slice System Slice.
[ 7.860858] random: systemd: uninitialized urandom read (16 bytes read)
[ 7.867495] systemd[1]: Reached target System Time Synchronized.
[ OK ] Reached target System Time Synchronized.
[ 7.885304] systemd[1]: Created slice User and Session Slice.
[ OK ] Created slice User and Session Slice.
[ 7.901150] systemd[1]: Listening on Syslog Socket.
[ OK ] Listening on Syslog Socket.
[ 7.916990] systemd[1]: Listening on udev Control Socket.
[ OK ] Listening on udev Control Socket.
[ 7.932990] systemd[1]: Listening on Journal Socket (/dev/log).
[ OK ] Listening on Journal Socket (/dev/log).
[ OK ] Listening on Journal Audit Socket.
[ OK ] Reached target Remote File Systems.
[ OK ] Reached target Slices.
[ OK ] Listening on Journal Socket.
Starting Remount Root and Kernel File Systems...
Mounting Kernel Debug File System...
Starting Create Static Device Nodes in /dev...
Starting Restore / save the current clock...
Starting Nameserver information manager...
Mounting POSIX Message Queue File System...
Mounting Huge Pages File System...
Starting Load Kernel Modules...
[ OK ] Reached target Swap.
Starting Journal Service...
[ OK ] Started Forward Password Requests to Wall Directory Watch.
[ 8.161340] wilc_sdio: loading out-of-tree module taints kernel.
[ OK ] Listening on /dev/initctl Compatibility Named[ 8.171530] wifi_pm : 0
Pipe.
[ 8.175905] wifi_pm : 1
[ 8.179183] wilc_sdio mmc1:0001:1: Driver Initializing success
[ OK ] Started Dispatch Password Requests to Console Directory Watch.
[ OK ] Reached target Local Encrypted Volumes.
[ OK ] Created slice system-serial\x2dgetty.slice.
[ OK ] Listening on udev Kernel Socket.
Starting udev Coldplug all Devices...
[ OK ] Created slice system-getty.slice.
[ OK ] Started Journal Service.
[ OK ] Started Remount Root and Kernel File Systems.
[ OK ] Mounted Kernel Debug File System.
[ OK ] Started Create Static Device Nodes in /dev.
[ OK ] Started Restore / save the current clock.
[ OK ] Mounted POSIX Message Queue File System.
[ OK ] Mounted Huge Pages File System.
[ OK ] Started Load Kernel Modules.
[ OK ] Started Nameserver information manager.
[ OK ] Reached target Network (Pre).
Mounting Kernel Configuration File System...
Starting Apply Kernel Variables...
[ OK ] Reached target Local File Systems (Pre).
Starting udev Kernel Device Manager...
Starting Load/Save Random Seed...
Starting Flush Journal to Persistent Storage...
[ OK ] Mounted Kernel Configuration File System.
[ OK ] Started Load/Save Random Seed.
[ OK ] Started Apply Kernel Variables.
[ OK ] Started Flush Journal to Persistent Storage.
[ OK ] Started udev Coldplug all Devices.
[ OK ] Started udev Kernel Device Manager.
[ OK ] Reached target Sound Card.
[ 9.062825] zocl-drm amba:zyxclmm_drm: IRQ index 0 not found
[ OK ] Found device /dev/ttyPS0.
[ OK ] Found device /dev/mmcblk0p1.
Mounting /boot...
[ OK ] Listening on Load/Save RF Kill Switch Status /dev/rfkill Watch.
[ OK ] Mounted /boot.
Starting Load/Save RF Kill Switch Status...
[ OK ] Reached target Local File Systems.
Starting Enable support for additional executable binary formats...
[ OK ] Started ifup for eth0.
Starting Raise network interfaces...
Starting Create Volatile Files and Directories...
[ OK ] Started Load/Save RF Kill Switch Status.
[ OK ] Started Enable support for additional executable binary formats.
[ OK ] Started Create Volatile Files and Directories.
Starting Network Time Synchronization...
Starting Update UTMP about System Boot/Shutdown...
Starting Network Name Resolution...
[ OK ] Started Entropy daemon using the HAVEGE algorithm.
[ OK ] Started Raise network interfaces.
[ OK ] Started Update UTMP about System Boot/Shutdown.
[ OK ] Started Network Time Synchronization.
[ OK ] Reached target System Initialization.
[ OK ] Started Daily apt download activities.
[ OK ] Started resolvconf-pull-resolved.path.
[ OK ] Reached target Paths.
[ OK ] Started Discard unused blocks once a week.
[ OK ] Listening on UUID daemon activation socket.
[ OK ] Listening on D-Bus System Message Bus Socket.
[ OK ] Started Daily apt upgrade and clean activities.
[ OK ] Started Daily Cleanup of Temporary Directories.
[ OK ] Reached target Sockets.
[ OK ] Reached target Basic System.
Starting Resize Filesystem on SD card...
Starting System Logging Service...
[ OK ] Started ntp-systemd-netif.service.
Starting Dispatcher daemon for systemd-networkd...
Starting Login Service...
Starting LSB: automatic crash report generation...
Starting PYNQ PL Server...
Starting Jupyter Notebook Server...
Starting LSB: Load kernel modules needed to enable cpufreq scaling...
[ OK ] Started Regular background program processing daemon.
[ OK ] Started Set the CPU Frequency Scaling governor.
[ OK ] Started D-Bus System Message Bus.
[ OK ] Started Login Service.
Starting WPA supplicant...
Starting USB Gadget for Networking...
[ OK ] Started Message of the Day.
[ OK ] Reached target Timers.
[ OK ] Started System Logging Service.
[ OK ] Started Network Name Resolution.
[ OK ] Started PYNQ PL Server.
[ OK ] Found device /dev/ttyGS0.
Starting resolvconf-pull-resolved.service...
[ OK ] Reached target Host and Network Name Lookups.
[ OK ] Started LSB: automatic crash report generation.
[ OK ] Started USB Gadget for Networking.
[ OK ] Started resolvconf-pull-resolved.service.
[ OK ] Started WPA supplicant.
[ OK ] Reached target Network.
Starting Permit User Sessions...
[ OK ] Started Unattended Upgrades Shutdown.
[ OK ] Reached target Network is Online.
[ OK ] Started ISC DHCP IPv6 server.
Starting Samba NMB Daemon...
[ OK ] Started ISC DHCP IPv4 server.
Starting OpenBSD Secure Shell server...
[ OK ] Started Permit User Sessions.
[ OK ] Started Getty on tty1.
[ OK ] Started Serial Getty on ttyGS0.
[ OK ] Started PYNQ X11 Server.
[ OK ] Started Serial Getty on ttyPS0.
[ OK ] Reached target Login Prompts.
[ OK ] Started LSB: Load kernel modules needed to enable cpufreq scaling.
Starting LSB: set CPUFreq kernel parameters...
[ OK ] Started LSB: set CPUFreq kernel parameters.
PYNQ Linux, based on Ubuntu 18.04 pynq ttyPS0
pynq login: xilinx (automatic login)
Welcome to PYNQ Linux, based on Ubuntu 18.04 (GNU/Linux 5.4.0-xilinx-v2020.1 aarch64)
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
xilinx@pynq:~$ root
-bash: root: command not found
xilinx@pynq:~$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.3.29 netmask 255.255.255.0 broadcast 192.168.3.255
inet6 fe80::222:cfff:fe00:c37 prefixlen 64 scopeid 0x20<link>
ether 00:22:cf:00:0c:37 txqueuelen 1000 (Ethernet)
RX packets 67 bytes 4408 (4.4 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 32 bytes 3812 (3.8 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 2627 bytes 176125 (176.1 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2627 bytes 176125 (176.1 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
usb0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.3.1 netmask 255.255.255.0 broadcast 192.168.3.255
ether 82:24:62:cf:93:78 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
xilinx@pynq:~$
Last metadata expiration check: 23:58:22 ago on Fri Oct 1 12:31:00 2021.
No match for argument: dnndk
Error: Unable to find a match: dnndk
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
- | - | - | - | - | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | - | - | - | - | - | - |