2019-02-25 17:00:22 u014134180 阅读数 98

0. 概述

我们编译linux驱动程序的函数代码都是Linux内核的函数,我们测试内核函数不能直接在用户层运行,需要借助ubuntu系统把内核函数放在模块,以模块形式插入ubuntu系统运行测试。

1. 代码目录结构

用linux命令行查看这个demo只有两个文件,一个c语言文件,一个是makefile编译规则文件。

wu_being@wu-being-1604:~/code/kernel-api/test$ ls
hello.c  Makefile

1.1 hello.c

#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>

static int __init hello_init(void)
{
	// run kernel function : printk  
	printk("<1>Hello Kernel!\n");  

	// test other kernel function
	// ...

	return 0;
}

static void __exit hello_cleanup(void)
{
	printk("<1>See you,Kernel!\n");
}

module_init(hello_init);        // enter kernel, call hello_init
module_exit(hello_cleanup);     // exit kernel, call hello_cleanup
MODULE_LICENSE("GPL");          // use gpl protocol

1.2 Makefile

obj-m += hello.o                         #generate module file
CURRENT_PATH := $(shell pwd)             #current path	
LINUX_KERNEL := $(shell uname -r)        #kernel version

# you ubuntu system kernel code path
LINUX_KERNEL_PATH := /usr/src/linux-headers-$(LINUX_KERNEL)

# $make: build and output .ko file
all:
	make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules

# $make clean: clean obj and bin file
clean:
	make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean 

2. 操作过程

2.1 make 编译模块

在当前代码目录的终端输入make,会跟据Makefile的编译规则编译c语言代码。

wu_being@wu-being-1604:~/code/kernel-api/test$ make
make -C /usr/src/linux-headers-4.15.0-29-generic         M=/home/wu_being/code/kernel-api/test              modules
make[1]: Entering directory '/usr/src/linux-headers-4.15.0-29-generic'
Makefile:976: "Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel"
  CC [M]  /home/wu_being/code/kernel-api/test/hello.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/wu_being/code/kernel-api/test/hello.mod.o
  LD [M]  /home/wu_being/code/kernel-api/test/hello.ko
make[1]: Leaving directory '/usr/src/linux-headers-4.15.0-29-generic'

2.2 生成文件

会生成下面这些文件,最后一个文件是.kolinux 模块文件。

wu_being@wu-being-1604:~/code/kernel-api/test$ ls -ltr
total 28
-rw-rw-r-- 1 wu_being wu_being  496 2月  20 16:45 hello.c
-rw-rw-r-- 1 wu_being wu_being  472 2月  20 16:54 Makefile
-rw-rw-r-- 1 wu_being wu_being 3216 2月  20 16:54 hello.o
-rw-rw-r-- 1 wu_being wu_being   52 2月  20 16:54 modules.order
-rw-rw-r-- 1 wu_being wu_being    0 2月  20 16:54 Module.symvers
-rw-rw-r-- 1 wu_being wu_being  596 2月  20 16:54 hello.mod.c
-rw-rw-r-- 1 wu_being wu_being 2584 2月  20 16:54 hello.mod.o
-rw-rw-r-- 1 wu_being wu_being 3904 2月  20 16:54 hello.ko

2.3 安装模块

把上面编译生成的.ko以模块形式安装插入在ubuntu系统中。

wu_being@wu-being-1604:~/code/kernel-api/test$ sudo insmod hello.ko 

查看输出结果,由下面输出可以看出我们已经成功在ubuntu运行了内核函数printk

wu_being@wu-being-1604:~/code/kernel-api/test$ sudo dmesg -c
[ 3156.458368] hello: loading out-of-tree module taints kernel.
[ 3156.458424] hello: module verification failed: signature and/or required key missing - tainting kernel
[ 3156.458726] <1>Hello Kernel!

2.4 卸载模块

wu_being@wu-being-1604:~/code/kernel-api/test$ sudo rmmod hello.ko 

查看卸载结果

wu_being@wu-being-1604:~/code/kernel-api/test$ sudo dmesg -c
[ 3180.690956] <1>See you,Kernel!

2.5 清除生成文件

运行 make clean

wu_being@wu-being-1604:~/code/kernel-api/test$ make clean
make -C /usr/src/linux-headers-4.15.0-29-generic         M=/home/wu_being/code/kernel-api/test              clean 
make[1]: Entering directory '/usr/src/linux-headers-4.15.0-29-generic'
  CLEAN   /home/wu_being/code/kernel-api/test/.tmp_versions
  CLEAN   /home/wu_being/code/kernel-api/test/Module.symvers
make[1]: Leaving directory '/usr/src/linux-headers-4.15.0-29-generic'

清除结果

wu_being@wu-being-1604:~/code/kernel-api/test$ ls 
hello.c  Makefile

Wu_Being 博客声明:本人博客欢迎转载,请标明博客原文和原链接!谢谢!
《在ubuntu系统运行linux内核相关函数demo》:https://blog.csdn.net/u014134180/article/details/87920120

2018-01-31 16:47:33 changgongcheng_yq 阅读数 109

Ubuntu JAVA运行环境配置

ubuntu作为对新手最友好的linux系统,以其良好的桌面系统和服务为linux系统的推广作出了巨大的贡献,当然本人更着迷于ubuntu里各式各样的小游戏,笑~

小贴士:
1.首次登陆是没有root密码的,后面有些只读文件的修改用root很方便
首次修改设置root密码:sudo passwd
用root登陆 su root  用exit退出root登陆
2.首次登陆是没有vim的,需要用命令安装vim编辑器(我被gedit坑过,具体过程就不说了)

Sudo apt-get install vim



第一步:安装VMTools
本人使用的虚拟机环境,vmtools能极大的改善虚拟机和物理机的交互效果。

关闭虚拟机,将安装虚拟机的DVD镜像改成vm14工具里的linux.iso(可以根据自己的对应版本找),开启ubuntu

点击左下角DVD,若没有该图标,则点击右下角光盘图标,点击连接。连接成功后打开VMware Tools的光盘

将里面的vmwareTools.tar.gz压缩包复制到桌面 打开终端解压 tar vxzf VmwareTools…

进入解压后文件的目录 cd vmware-tools-distrib

执行安装:sudo ./vmware-install.pl 第一步选择y后面一直回车就好

等待 enjoy字样出现完成安装


第二步:使用桥接模式联网

本机网络环境配置:

以太网-更改适配器选项-属性-勾选Vmware Bridge Protocol

以太网-更改适配器选项-属性-共享-共享给vmnet8这个网络

虚拟机选择桥接模式,勾选启动连接,勾选复制物理网络连接状态

 

打开虚拟机

Ctrl+alt+t打开终端 输入命令查看ip地址ifconfig

Ping -c 3 www.baidu.com

一般来说这个桥接模式的ip不会再变


设置固定ip (该方法本人测试不起作用,不知什么原因,先放这儿)

1.修改网络接口配置

打开sudo vim /etc/network/interfaces

输入如下内容 本人是ens33,具体网络ifconfig自己查看

#static address

Auto ens33

Iface ens33 inet static

Address 192.168.1.184

Gateway 192.168.1.1

Netmask 255.255.255.0

2.设置DNS

Sudo vim /etc/resolvconf/resolv.conf.d/head

Nameserver 电信114.114.114.114/谷歌8.8.8.8/百度180.76.76.76/阿里223.5.5.5,223.6.6.6 随便选一个

3.重启虚拟机网络服务

Sudo /etc/init.d/networking restart


第三步:jdk环境变量配置

新建文件夹sudo mkdir/java

删除文件夹或文件 sudo rm-rf /java

移动文件 sudo mv/home/changgongcheng/桌面/jdk-9.0.4_linux-x64bin.tar.gz/java

复制文件 sudo cp/home/changgongcheng/桌面/jdk-9.0.4_linux-x64bin.tar.gz/java

解压 cd /java     sudo tar zxvf jdk-9.0.4_linux-x64bin.tar.gz

 

Ununtu16环境变量配置jdk8 

按照上述方法,新建java目录 ,解压jdk1.8安装包,修改系统环境变量

//sudo vim(gedit) /etc/environment 

//PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:$JAVA_HOME/bin"
//exportCLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
//export JAVA_HOME=/java/jdk1.8.0_121

//使环境变量生效 source /etc/environment

//若重启后用不了,则需要配置所有用户的环境变量

Sudo vim /etc/profile 在文件最后加上如下代码(因为系统优先级的问题,只加上这段代码就可以)

#setJava environment

export JAVA_HOME=/java/jdk1.8.0_56
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

aa

使环境变量生效 source /etc/profile


打开终端,输入java -version 测试环境变量是否配置成功

重启ubuntu,sudo mkdir/java


Jdk升级配置方法(该方法来自网络,本人未测试过,供原有jdk升级jdk9用)

echo$JAVA_HOME       //查看原先的值

sudoecho export JAVA_HOME="/usr/lib/jvm/jdk-9.0.1/" >> ~/.bashrc //设置环境变量

source ~/.bashrc  //使环境变量生效

echo$JAVA_HOME       //查看环境变量是否设置成功


第四步:配置并运行tomcat

将tomcat拖到ubuntu,复制粘贴到/java目录下 解压tar vxzf

将war包复制到tomcat的webapp下

跳转到bin目录 cd /java/apache-tomcat-7.0.84/bin

运行项目 ./startup.sh ./shutdown.sh

在浏览器输入localhost:8080



附录一:vim基本使用方法 (请自己新建个文档实践,改坏了系统配置文件本人概不负责)

yy复制 p粘贴 dd删除 I 编辑 ctrl+j 换行 

esc退出编辑模式 :X加密文件   :wq 强制保存退出   :x保存(若修改)退出 :ZZ写入退出   :q未修改退出  :q!强制不修改退出


附录二:更改文件权限的chmod命令一个用法

Sudo chmod -R 755 /user/local/tomcat(R必须大写)

介绍:chmod命令是linux上用于改变权限的命令,-R是递归遍历子目录,-u用户-g组-o其他-a全部

第一个数字代表文件所属者权限 user

第二个数字代表文件所属者所在组权限 group

第三个数字代表其他用户权限 other

4 = r 读

2 = w 写

1 = x 可执行

所以:1可执行,2写,3可执行+写,4读,5读+可执行,6读+写,7读+写+可执行



我配置环境变量花了几乎一天时间,期间走了不少弯路,试了很多种环境变量配置方法,很多时候重启系统就不管用了。

下面附上一篇大神的终极解惑文,关于各种环境变量配置方法和涉及文件之间关系和优先级的详解,早点看到这文就少走弯路了,醍醐灌顶啊!

http://www.linuxidc.com/Linux/2016-09/135476.htm



2007-05-05 09:29:00 xinyu391 阅读数 2782
ubuntu linux 运行在索尼 Ericsson P990i手机上

   一个名叫的人成功的将ubuntu linux的 一个版本成功的运行在了索尼Ericsson P990i手机上。这款手机屏幕是240 x 320 TFT触摸屏,200万像素的摄像头,64M内存,128M闪存,其中60M内存用于手机系统。该款手机还支持802.11b Wi-Fi, 蓝牙2.0, 音乐播放器, 和 USB 2.0 。
2017-11-27 12:30:31 w20101310 阅读数 3472

在安装puppeteer过程中遇到一些错误,记录一下

首先可能遇到node install.js错误,可以使用一下命令参数安装puppeteer

npm i --save puppeteer --ignore-scripts
或者先执行一下命令再安装puppeteer
npm config set unsafe-perm true
npm i puppeteer

其次可能会遇到各种库没有安装的错误,比如libX11-xcb.so.1,具体所需依赖可以查看Troubleshooting.或直接执行一下命令

sudo apt install gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget

还有sandbox 问题,可以尝试在无沙箱模式下运行puppeteer

const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']});
2018-05-24 23:44:19 MT1232 阅读数 402

最近在通过赵炯博士的《Linux内核完全注释》学习操作系统,一直想实实在在的把系统运行咯,通过各个博客学习怎么编译,总遇到博客中没记录的错误,然后就打住了,但总觉得如刺在喉一般,不把系统运行了心里总不舒服,今晚又弄了一次,总算成功了,在此分享一下,为后来者提供点便捷。(闲话结束:)

系统:Ubuntu 16.04

Bochs:2.6.9

bochsrc配置:

romimage: file=/usr/local/share/bochs/BIOS-bochs-latest
megs: 16  
vgaromimage: file=/usr/local/share/bochs/VGABIOS-lgpl-latest  
floppya: 1_44="bootimage-0.11-hd.new", status=inserted  
ata0-master: type=disk, path="hdc-0.11-new.img", mode=flat, cylinders=410, heads=16, spt=38  
boot: a  
log: bochsout.txt     
private_colormap: enabled=0  
fullscreen: enabled=0  
screenmode: name="sample"  

文件打包放在了:https://download.csdn.net/download/mt1232/10436244(赚点积分,嘻嘻:)

没有更多推荐了,返回首页