eclipse使用笔记


软件版本:eclipse-cpp neno


配置项导出
File --> Export...
General --> Preferences

配置项导入
File --> Import...
General --> Preferences


折叠代码
Windows --> Preferences --> C/C++ --> Editor --> Folding.
选择或取消相关选项。

建议选中项:
Enable folding of preprocessor branches(#if/#endif)
Enable folding of control flow statements(if/else,do/while,for,switch)

设置完成后重启eclipse生效.


修改字体
Windows --> Preferences --> General --> Appearance --> Colros and Fonts.
修改Basic项的Text Font.

注意事项:
1.修改字体的时候,将脚本修改为“中欧字符”(默认为西欧字符),可解决汉字太小的问题;
2.有的字体默认不显示,需进入字体目录,设置为显示;


配置黑色背景
Windows --> Preferences --> General --> Appearance
Theme: 选择对应模式(可以修改所有框架)

修改代码背景色
Windows --> Preferences --> General --> Editors -->Text Editors

只修改了代码区的背景色,其他区域未修改。

修改无效代码背景色(被#if注释掉的代码)
Windows --> Preferences --> C++ --> Editor --> Inactive code hight.

选中代码高亮
Windows --> Preferences --> General --> Editors -->Text Editors --> Annotations

C/C++ Occurrences项
Text as 选择样式(推荐Box)
Color 选择颜色

C/C++ Write Occurrences项:
选中变量时高亮(推荐Dashed Box)


关闭注释拼写检查
Windows --> Preferences --> General --> Editors -->Text Editors --> Annotations

关闭Spelling Errors下的Text as项;

关闭字符串拼写检查
Windows --> Preferences --> General --> Editors -->Text Editors --> Spelling

Ignore string literals.


隐藏指定文件(Filter)

右键工程(或目录)-->Properties-->
Resource-->Resource Filters
Add Filters...

选中:
Exculde all
Files
All Children(recursive)

在Filter Details中添加表达式即可:
*.bak

然后一路确认即可;


制表符处理

window——preference——General——Editor——Text Editor设置页面

Display Tab Width:指定制表符宽度;

Insert spaces for tabs,选择是否将制表符转换为空格;

- 阅读全文 -

Linux系统应用--dpkg与apt-get


操作系统:debian8
简要说明:
dpkg 是Debian package的简写,用于软件的安装,更新和移除;
apt-get主要用于在线安装更新与移除。

dpkg命令


安装软件:

# dpkg -i package.deb

列出已安装软件包信息:

# dpkg -l package

不加参数列出所有软件包:

# dpkg -l

列出与包关联的文件:

# dpkg -L package

删除软件(保留配置):

# dpkg -r package.deb

删除软件(不保留配置):

# dpkg -P package

清除已删除软件配置:

# dpkg -l | awk '/^rc/{print $2}' | xargs dpkg -P

命令说明:
dpkg -l 列出所有软件包
awk '/^rc/{print $2}' 找出以rc开头的一行,输出包名(第二列)
xargs dpkg -P 删除参数列表中的包(xargs用于参数列表分段)


apt-get命令


更新列表:

#apt-get update

安装软件:

#apt-get install package

删除软件:

#apt-get autoremove package

注意事项:
autoremove会删除关联项目,但不会删除配置文件;

卸载并清除软件包的配置

#apt-get purge package 

下载源码

# apt-get source search package

查询软件:

# apt-cache search package

查询依赖:

$ apt-cache depends vino

下载deb安装包: 用于离线安装

$ apt-get download pkgname

设置CDROM源:

# 去掉以下两行前端的注释即可
deb cdrom:[Debian GNU/Linux 8.6.0 _Jessie_ - Official amd64 DVD Binary-1 20160917-14:25]/ jessie contrib main
deb cdrom:[Debian GNU/Linux 8.6.0 _Jessie_ - Official amd64 DVD Binary-1 20160917-14:25]/ jessie contrib main

推荐的apt-get源 /etc/apt/source.list

deb http://mirrors.tuna.tsinghua.edu.cn/debian/ jessie main
deb-src http://mirrors.tuna.tsinghua.edu.cn/debian/ jessie main

字段解析:
A - deb表示二进制发行包, deb-src表示源码包
B - 源地址
C - 发行版(打开网址进入目录后可以看到支持的发行版本)
D - 该发行版下的软件包,通常有几个目录组成,可以进入发行版目录查看。

- 阅读全文 -

bcm43142无线网卡安装


文章摘要:
由于联想笔记本采用了bcm43142做为无线网卡,驱动程序为非自由软件(non-free),因此系统未整合进去,需要手动安装;
操作系统: debian8
参考文档: https://wiki.debian.org/wl


1.添加软件源
在/etc/apt/source中添加以下内容:

deb http://httpredir.debian.org/debian/ jessie main contrib non-free

2.更新并安装相关软件包

# apt-get update
# apt-get install linux-image-$(uname -r|sed 's,[^-]*-[^-]*-,,') linux-headers-$(uname -r|sed 's,[^-]*-[^-]*-,,') broadcom-sta-dkms

3.删除冲突模块

# modprobe -r b44 b43 b43legacy ssb brcmsmac bcma

4.加载wl模块

# modprobe wl

- 阅读全文 -

Linux驱动程序--USB设备驱动程序


首先注册USB驱动

// 定义USB设备ID
#define USB_SKEL_VENDOR_ID  0x0483
#define USB_SKEL_PRODUCT_ID 0x5740

// 定义使用本驱动程序的USB设备列表
static struct usb_device_id skel_table [] = {
    { USB_DEVICE(USB_SKEL_VENDOR_ID, USB_SKEL_PRODUCT_ID) },
    { }
};
              
static struct usb_driver skel_driver = {
    .name = "skeleton",
    .id_table = skel_table,
    .probe = skel_probe,
    .disconnect = skel_disconnect,
};
    
static int __init usb_skel_init(void)
{
    int result;
        
    printk("usb_skel_init\r\n");
      
    // 注册USB驱动
    result = usb_register(&skel_driver);
    if (result){
        printk("usb_register failed. Error number %d", result);
    }
             
    return result;
}

static void __exit usb_skel_exit(void)
{
    /* deregister this driver with the USB subsystem */
    usb_deregister(&skel_driver);
    
    printk("usb_skel_exit\r\n");
}

module_init (usb_skel_init);
module_exit (usb_skel_exit);    
MODULE_LICENSE("GPL");

probe与disconnect接口

static int skel_probe(struct usb_interface *interface, const struct usb_device_id *id)
{
    struct usb_skel *dev = NULL;
    struct usb_host_interface *iface_desc;
    struct usb_endpoint_descriptor *endpoint;
    size_t buffer_size;
    int i;
    int retval = -ENOMEM;

    // 为每个设备分配内存,用于保存参数
    dev = kmalloc(sizeof(struct usb_skel), GFP_KERNEL);
    if (dev == NULL) {
        err("Out of memory");
        goto error;
    }
    memset(dev, 0x00, sizeof (*dev));
    kref_init(&dev->kref);

    dev->udev = usb_get_dev(interface_to_usbdev(interface));
    dev->interface = interface;

    // 查到可用端点信息,以保证设备与驱动的一致性
    iface_desc = interface->cur_altsetting;
    for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
        endpoint = &iface_desc->endpoint[i].desc;

        if (!dev->bulk_in_endpointAddr &&
            (endpoint->bEndpointAddress & USB_DIR_IN) &&
            ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
                    == USB_ENDPOINT_XFER_BULK)) {
            /* we found a bulk in endpoint */
            buffer_size = endpoint->wMaxPacketSize;
            dev->bulk_in_size = buffer_size;
            dev->bulk_in_endpointAddr = endpoint->bEndpointAddress;
            dev->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
            if (!dev->bulk_in_buffer) {
                err("Could not allocate bulk_in_buffer");
                goto error;
            }
        }

        if (!dev->bulk_out_endpointAddr &&
            !(endpoint->bEndpointAddress & USB_DIR_IN) &&
            ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
                    == USB_ENDPOINT_XFER_BULK)) {
            /* we found a bulk out endpoint */
            dev->bulk_out_endpointAddr = endpoint->bEndpointAddress;
        }
    }
    if (!(dev->bulk_in_endpointAddr && dev->bulk_out_endpointAddr)) {
        err("Could not find both bulk-in and bulk-out endpoints");
        goto error;
    }

    // 保存相关参数
    usb_set_intfdata(interface, dev);

    // 注册设备文件
    retval = usb_register_dev(interface, &skel_class);
    if (retval) {
        /* something prevented us from registering this driver */
        err("Not able to get a minor for this device.");
        usb_set_intfdata(interface, NULL);
        goto error;
    }

    printk("USB Skeleton device now attached to USBSkel-%d", interface->minor);
    return 0;

error:
    if (dev)
        kref_put(&dev->kref, skel_delete);
    return retval;
}

static void skel_disconnect(struct usb_interface *interface)
{
    struct usb_skel *dev;
    int minor = interface->minor;

    /* prevent skel_open() from racing skel_disconnect() */
    lock_kernel();

    dev = usb_get_intfdata(interface);
    usb_set_intfdata(interface, NULL);

    /* give back our minor */
    usb_deregister_dev(interface, &skel_class);

    unlock_kernel();

    /* decrement our usage count */
    kref_put(&dev->kref, skel_delete);

    printk("USB Skeleton #%d now disconnected", minor);
}

Write接口(发送数据)

// 数据发送完成回调函数
static void skel_write_bulk_callback(struct urb *urb, struct pt_regs *regs)
{
  printk("skel write callback.\r\n");
  /* sync/async unlink faults aren't errors */
  if (urb->status && 
      !(urb->status == -ENOENT || 
        urb->status == -ECONNRESET ||
        urb->status == -ESHUTDOWN)) {
    printk("%s - nonzero write bulk status received: %d",
        __FUNCTION__, urb->status);
  }

  /* free up our allocated buffer */
  usb_free_coherent(urb->dev, urb->transfer_buffer_length, 
      urb->transfer_buffer, urb->transfer_dma);
}

static ssize_t skel_write(struct file *file, const char __user *user_buffer, size_t count, loff_t *ppos)
{
  struct usb_skel *dev;
  int retval = 0;
  struct urb *urb = NULL;
  char *buf = NULL;

  dev = (struct usb_skel *)file->private_data;

  printk("skel is write.\r\n");

  /* verify that we actually have some data to write */
  if (count == 0){
    goto exit;
  }

  /* 创建URB */
  urb = usb_alloc_urb(0, GFP_KERNEL);
  if (!urb) {
    retval = -ENOMEM;
    goto error;
  }

  // 动态分配内存
  buf = usb_alloc_coherent(dev->udev, count, GFP_KERNEL, &urb->transfer_dma);
  if (!buf) {
    retval = -ENOMEM;
    goto error;
  }

  if (copy_from_user(buf, user_buffer, count)) {
    retval = -EFAULT;
    goto error;
  }

  /* 初始化URB为批量 */
  usb_fill_bulk_urb(
          urb,
          dev->udev,
          usb_sndbulkpipe(dev->udev, dev->bulk_out_endpointAddr),
          buf,
          count,
          (usb_complete_t)skel_write_bulk_callback, dev);

  urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;

  /* 提交urb数据(发送数据) */
  retval = usb_submit_urb(urb, GFP_KERNEL);
  if (retval) {
    printk("%s - failed submitting write urb, error %d", __FUNCTION__, retval);
    goto error;
  }

  // 释放urb
  usb_free_urb(urb);

exit:
  return count;

error:
  usb_free_coherent(dev->udev, count, buf, urb->transfer_dma);
  usb_free_urb(urb);
  kfree(buf);
  return retval;
}

注意事项:
usb_buffer_alloc/usb_buffer_free在新的内核版本中函数名称修改为
usb_alloc_coherent/usb_free_coherent,参数列表不变;

- 阅读全文 -

debian8应用笔记


修改桌面菜单(面板)字体

# vi /usr/share/gnome-shell/theme/gnome-shell.css

修改以下内容:

stage {
    font-family: KaiTi, sans-serif; 
    font-size: 14pt; 
    color: white;
}

修改后按 Alt+F2 --> r --> Enter重新加载

修改图标字体

/* small bold */
.dash-label,
.window-caption,
.switcher-list,
.app-well-app > .overview-icon,
.show-apps > .overview-icon,
.grid-search-result .overview-icon {
    font-size: 14pt;
    font-weight: bold;
}

修改控制台字体

#dpkg-reconfigure console-setup

注意事项:
1.只能修改为其支持的字体,一般常用VGA比较好看;
2.修改后重启生效


添加应用图标

在/usr/share/applications/目录下添加xxx.desktop文件,内容如下:

[Desktop Entry]
Version=1.0

#显示的名称
Name=eclipse
GenericName=eclipse for cpp
Comment=Code Editer

#执行的命令
Exec=/opt/eclipse/eclipse
Terminal=false
X-MultipleArgs=false
Type=Application

#显示图标
Icon=/opt/eclipse/icon.xpm
#分类(显示不同菜单下)
Categories=Development;Office;

StartupWMClass=Chromium
StartupNotify=true

也可以复制其他desktop文件然后进行修改;


安装字体:
1.在/usr/share/fonts目录下建立字体目录windows;
2.将字体文件复制至该目录下;
3.在该目录下执行下列命令:

#mkfontdir
#mkfontscale
#fc-cache -fv 

注意事项:
1.一般情况下所有字体约定保存在/usr/share/fonts目录下,一般每个类新建一个子目录;
2.mkfontdir和mkfontscale命令生成了两个文件;
3.如果系统显示无mkfontdir,mkfontscale命令,则需要安装ttf-mscorefonts-installer软件包;
4.fc-cache命令位于fontconfig软件包中。

显示已安装字体:

#fc-list

安装输入法:

#apt-get install scim
#apt-get install scim-pinyin
#apt-get install scim-tables-zh

注意事项:
1.系统自带的fcitx和ibus都有问题,折腾很久都不行;
2.安装完成后需要从输入法配置scim为默认输入法;


安装NFS

NSF服务名称修改为:
nfs-kernel-server
nfs-common


声卡驱动:

#modprobe snd_pcm_oss

即可显示/dev/dsp和/dev/audio文件


安装谷歌浏览器

方案一

chrome基于chrominum加入了非开源代码,直接安装chromium即可;

#apt-get chromium

方案二

加入google源

deb http://dl.google.com/linux/chrome/deb/ stable main

下载安装公钥:

#wget https://dl-ssl.google.com/linux/linux_signing_key.pub    
#apt-key add linux_signing_key.pub

安装chrome

#apt-get update
#apt-get install google-chrome-stable

注意事项:
但是,可是,你确定一定以及肯定,你能真的访问谷歌的源吗????


安装eclipse
虽然系统自带了eclipse的安装源,可以通过apt-get来直接安装,但时其版本比较低;
1.从http://java.sun.com/网站下载JavaSE,并解压至/opt目录下;
2.添其添加至环境变量,或者在/usr/bin中添加软链接(重要);
3.从http://www.eclipse.org/网站下载最新的eclipse,并解压至/opt目录下;
4.添加桌面图标;

容易出现的问题:
1.提示无法创建Java虚拟机;
修改eclipse.ini文件中的

-XX:PermSize=128M
-XX:MaxPermSize=512M
-Xms128m
-Xmx512m

交叉编译工具不可用

安装lib32z-dev即可;


登陆日志分析脚本

grep Failed /var/log/auth.log | awk -F ':' '{if(NF==4)print $4};' | awk -F 'port' '{print $1};' | awk -F ' ' '{print $(NF-2) "\t" $NF };' | sort -u

分析说明:
Jun 11 21:52:51 debian sshd[26691]: Failed password for invalid user user5 from 92.27.90.18 port 25608 ssh2
1.以:为分割符,找出字段为4的条目;
2.再以删除port之后的内容(因为每次连接的端口都不一样);
3.再以空格为分割符,找出IP的位置;
4.以排序的方法相同的内容只显示一条;


允许root用户登陆

1.修改gdm3的设定文件,在[security]字段后面追加如下一行:

# File: /etc/gdm3/daemon.conf

[security]

# 允许root用户登陆
AllowRoot = true

2.修改gdm3的登录pam文件,注释掉对root用户名判断:

# File: /etc/pam.d/gdm-password

# 注释掉下边这一行
#auth required pam_succeed_if.so user != root quiet_success

自动登录

修改gdm3的设定文件,在[daemon]字段后面两行:

# File: /etc/gdm3/daemon.conf

[daemon]
# 自动登陆使能
AutomaticLoginEnable = true 

# 以root自动登录
AutomaticLogin = root 

如果想等几秒再登录,可以在[daemon]字段后面追加如下内容:

# 延迟5秒登录,可修改
TimedLoginEnable = true
TimedLogin = root
TimedLoginDelay = 5 

如果自动登陆的是roo用户,还要修改gdm3的自动登录pam文件:

# /etc/pam.d/gdm-autologin

# 注释掉下边一行
#auth required pam_succeed_if.so user != root quiet_success 

取消登陆用户列表

# File: /etc/gdm3/greeter.dconf-defaults 

# 设置用户列表禁用
disable-user-list=true

修改完成需要重启系统生效。


vmhgfs不能挂载:

Error: cannot mount filesystem: No such device

需要安装open-vm-tools-dev:

# apt-get install open-vm-tools-dev

root用户目录彩色显示: 修改.bashrc文件ls命令的参数

alias ls='ls '--color=auto'

提示符彩色显示: 修改.bashrc中的PS1参数

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w \$\[\033[00m\] '

写的比较完整的一个样例:

export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'

force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        color_prompt=yes
    else
        color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w \$\[\033[00m\] '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

- 阅读全文 -


Copyright©2025 春天花会开, All Rights Reserved. Email: webmaster@oroct.com